链表初识

来源:互联网 发布:手机mac地址修改软件 编辑:程序博客网 时间:2024/06/01 22:30
//链表
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Student{
int id;
char name[20];
int score;
struct Student *next;
}Stud,*Stu;
//head是一个带头节点的链表
void insert(Stu head);
void del(Stu head,int id);
void print(Stu head);
int main()
{
Stu s1=(Stu)malloc(sizeof(Stud));//头指针
s1->next=NULL;
s1->id=0;//借用来表示链表的节点个数
for(int i=0;i<3;i++) insert(s1);
print(s1);
printf("请输入要删除的学生学号:");
int id;
scanf("%d",&id);
del(s1,id);
print(s1);
return 0;
}
void insert(Stu head)
{
printf("请输入学号 姓名 成绩:");
Stu q=(Stu)malloc(sizeof(Stud));
scanf("%d %s %d",&q->id,q->name,&q->score);
q->next=head->next;
head->next=q;
head->id++;
}
//head是一个带头节点的链表,id是要删除节点的学号
void del(Stu head,int id)
{
Stu p=head;
while(p->next!=NULL)
{
if (p->id==id)
{
Stu q=head->next;
head->next=p->next;
free(q);
break;
}
else if(p->next->id==id)
{
Stu q=p->next;
p->next=p->next->next;
free(q);
head->id--;
break;
}
p=p->next;
}
}
//输出链表数据
void print(Stu head)
{
Stu p=head;
printf("链表共有%d个节点\n",head->id);
while(p->next!=NULL)
{
printf("学号%d,姓名%s,成绩%d\n",p->next->id,p->next->name,p->next->score);
p=p->next;
}
}
0 0