@[TOC]函数,结构体,链表简单总结
函数
数据类型 函数名(形参说明表){
说明语句序列;
可执行语句序列;
}
1.函数的”数据类型”指出该函数通过return返回值的类型,常用数据类型如int、float、char等外,特殊类型即void,void型函数无返回值
2.函数可以没有形参,但函数名后的()不能省略。
3.对于void型函数不能包含return语句,其它类型的函数至少包含一个return语句
例:交换两数函数
void swap(int *p,int *q){
int t = *p;
*p = *q;
*q = *t;
}
函数调用
函数名(实参表);
1.在调用函数时,函数名后圆括号中的多个实参彼此之间用逗号隔开
2.实参与形参的个数必须相等,对应类型应兼容,实参与形参按顺序对应,一一传递数据。
3.==形参在函数调用前不占内存;函数调用时为形参分配内存;==调用结束,内存释放。
设计递归函数必须符合以下3个条件:
1.可以把要解决的问题转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同,只是所处理的对象有规律的递增或递减。
2.可以应用这个转化过程使问题得到解决
3.必须有一个明确的结束递归条件
结构体
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
}变量名表列;
注:
1.使用typedef是为结构体定一个别名
2.C语言不允许使用一个数组直接为另一个数组赋值,但使用一个结构体变量为另一个结构体变量赋值是合法的,可以使用赋值操作符(=)将一个结构变量赋值给另一个结构变量
结构体字节对齐:
(1)结构体的大小能够整除其最宽基本类型成员的大小;
(2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
(3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
例子:
# include <stdio.h>
# include <malloc.h>
struct Student{
int age;
float score;
char name[100];
};
int main(void)
{
int len,i,j;
struct Student * pArr;
struct Student t;
printf("len = ");
scanf("%d",&len);
pArr = (struct Student *)malloc(len * sizeof(struct Student));
for(i=0;i<len;i++)
{
printf("age = ");
scanf("%d",&pArr[i].age);
printf("name = ");
scanf("%s",pArr[i].name);
printf("score = ");
scanf("%f",&pArr[i].score);
}
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(pArr[j].score > pArr[j+1].score)
{
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = t;
}
}
}
for(i=0;i<len;i++)
{
printf("age = %d\n",pArr[i].age);
printf("name = %s\n",pArr[i].name);
printf("score = %f",pArr[i].score);
printf("\n");
}
return 0;
}
共用体:
union 共用体名称(或称标识)
{
存储数据列表(或称成员变量列表)
};
特点:
1.所有成员引用的是内存中相同的位置
2.共用体变量任何时刻只有一个成员存在
3.共用体变量定义分配内存,长度取决于最长成员与最宽基本数据类型成员
链表
单链表尾插法建立`:
# include <stdio.h>
# include <malloc.h>
typedef struct list {
int data;
struct list * next;
}node,*pnode;
pnode initlist(){
pnode head;
head = (pnode)malloc(sizeof(node));
head->next = NULL;
return head;
}
void weicha(pnode head){
pnode r,s;
int data;
r = head;
printf("请输入学生学号:\n");
while(1){
scanf("%d",data);
if(data==0)
break;
s = (pnode)malloc(sizeof(node));
s->data = data;
r->next = s;
r = s;
}
}
单链表头插法建立`:
# include <stdio.h>
# include <malloc.h>
typedef struct list {
int data;
struct list * next;
}node,*pnode;
pnode initlist(){
pnode head;
head = (pnode)malloc(sizeof(node));
head->next = NULL;
return head;
}
void toucha(pnode head){
pnode s;
int data;
printf("请输入学生学号:\n");
while(1){
scanf("%d",&data);
if(data==0)
break;
s = (pnode)malloc(sizeof(node));
s->data = data;
s->next = head->next;
head->next = s;
}
}