建立顺序链表
建立顺序链表,首先要建立一个包含本类型指针的结构体
比如
struct data
{
int sc;
char name[16];
data next;
};
下图简单的演示了链表的建立过程(不喜勿喷)
结构体与数组相比更加灵活,它不需要像数组那样存储在连续的空间内,而是可以把链表的各部分存储在不同区域,通过next指针指向下个链表单元的存储位置。示例代码如下:
//建立顺序链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct data
{
int sc;
char name[16];
data *next;
};
data *Creat()
{
int sc;
data *head,*tail,*p;//需要头指针,尾指针
char name[16];
head=tail=NULL;//将其初始化为空
while(scanf("%d",&sc),sc!=0)//设置终止条件为sc为0
{
scanf("%s",name);
p=(data* )malloc(sizeof(data));//给p申请一块内存,或者说让p指向一块大小为
p->sc=sc; //sizeof(data)的存储位置
strcpy(p->name,name);//给p的两个参数赋值,字符串赋值不能用=,应用strcpy()函数
p->next=NULL;//不要忘记给p的指针赋空,因为这始终是最后一个位置
/*最关键的三句话*/
if(head==NULL) //1.当第一次连接时
head=p; //头指针指向p
else //2.不是第一次(头指针有意义时)
tail->next=p; //让尾指针的指向p
tail=p; //将尾指针移动到p位置
}
return head; //返回head的位置,可根据head遍历整个链表
}
/*打印链表*/
void Print(data *head)
{
data *p=head;//不对head操作,新建一个与head相同的p,对它操作
if(p==NULL)//链表建立失败
{
printf("Not Found!\n");
return ;
}
for(p=head;p!=NULL;p=p->next)
printf("%d %s\n",p->sc,p->name);
return ;
}
int main(void)
{
data *p;
p=Creat();
Print(p);
return 0;
}