黑马程序员——ios学习笔记 C语言 结构体&链表&枚举

时间:2021-07-13 00:23:31

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


结构体
结构体是一种构造数据类型。
与其他高级语言中的“记录”类似。
定义:由相互关联的不同数据类型的数据组成的有机整体。
用途:为处理复杂的数据结构提供了手段。
                为函数间传递不同类型的参数提供了便利。
关键字:struct 

struct [结构体名]
{
类型标识符 成员名1;
类型标识符 成员名2;
…………….
};
#include <stdio.h>
#include <string.h>
#define FORMAT "%d\n%s\n%f\n%f\n%f\n"
struct student /*定义为外部结构体类型*/
{ int num; char name[20]; float score[3];};
void main()
{ void print(struct student);
struct student stu; /*定义为局部结构体类型变量*/
stu.num=12345;
strcpy(stu.name,"Li Li");
stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.6;
print(stu); /*结构体变量作实参*/
}
void print(struct student stu)
{ printf(FORMAT,stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);
printf(“\n”);}


链表

数组:静态分配存储单元,容易造成内存浪费。
链表:是重要的数据结构,它根据需要,动态分配内存单元 。

链表特征:头指针变量,存放链表首地址,链表中每个元素称结点,其内容: 
1、数据部分:可有若干项(整、实、字符、结构体类型等)
2、指针变量:下一结点的地址,最后一个结点(表尾)的地址部分为NULL。 

void main( ) 
{ struct student *head, *stu;
long del_num;
printf(“input records: \n”);
head=creat(); /*建立链表,返回头指针*/
print(head); /*输出全部结点*/
printf(“\n input delete number:”);
scanf(“%ld”, &del_num); /*输入要删除的学号*/
while(del_num !=0)
{ head=del(head,del_num); /*删除后链表的头地址*/
print(head); /*输出全部结点*/
printf(“input the delete number:”);
scanf(“%ld”, &del_num); /*输入要删除的学号*/
}
printf(“\n input the inserted record:”);
stu=(struct student *) malloc(LEN);
scanf(“%ld,%f”, &stunum, &stuscore); /*输入要插入的结点*/
while(stunum !=0)
{ head=insert(head,stu); /*插入新结点,返回地址*/
print(head); /*输出全部结点*/
printf(“input the inserted record:”);
stu=(struct student *) malloc(LEN);
scanf(“%ld,%f”, &stunum, &stuscore);
}
}


枚举类型
        枚举类型是ANSI C新标准所增加的。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

        枚举类型及其变量的定义形式:
        enum  枚举类型名 {枚举元素列表} 枚举变量列表;

#include <stdio.h>        /*口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同色的球的可能取法,打印出每种排列的情况*/
void main( )
{enum color{red,yellow,blue,white,black}; <span style="font-family: Arial, Helvetica, sans-serif;"> /*创建color的枚举类型*/</span>
enum color i,j,k,pri; <span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> /*定义四个枚举变量*/</span>
int n,loop;
n = 0;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(i != j)
{for(k=red;k<=black;k++)
if((i != j) && (k != j))
{n=n+1;
printf(“%-4d”,n);
for(loop=1;loop<=3;loop++)
{switch(loop)
{case 1: pri=i;break;
case 2: pri=j;break;
case 3: pri=k;break;
default: break;
}
switch(pri) <span style="font-family: Arial, Helvetica, sans-serif;">/*使用switch将各种情况打印出来*/</span>
{ case red: printf(”%-10s”,”red”);break;
case yellow: printf(”%-10s”,”yellow”); break;
case blue: printf(”%-10s”,”blue”); break;
case white: printf(”%-10s”,”white”); break;
case black: printf(”%-10s”,”black”); break;
default: break;
} }
printf(”\n”);
} }
printf(”\ntotal:%5d\n”,n); /*每5个结果换一次行*/
}