[C] 纯文本查看 复制代码 #include<stdio.h>
#include<malloc.h>
typedef struct student{
int num;
char name[20];
float score;
struct student *next;
}LinkList;
//创建链表并初始化
LinkList *creat(int n)
{
int i;
LinkList *head,*newer,*end;//头节点 新节点 尾节点
head = (LinkList *)malloc(sizeof(LinkList));//给head分配地址
end = head;
for(i = 0;i < n;i++)
{
newer = (LinkList *)malloc(sizeof(LinkList));
scanf("学号%d,姓名%s,成绩%f",newer->num,newer->name,newer->score);
end->next = newer;
end = newer;
}
end->next = NULL;//结束创建
return head;
}
//头插入链表节点
void insert(LinkList *list, int n)
{
LinkList *t = list,*p;
int i=0;
while(i < n && t != NULL)//循环整个链表
{
t = t->next;
i++;
}
if(t != NULL)
{
p = (LinkList *)malloc(sizeof(LinkList));
printf("输入要插入的值:");
scanf("%d,%s,%f",p->num,p->name,p->score);
p->next = t->next;//填充p节点的指针域,也就是说把p的指针域指向t的下一个节点
t->next = p; //填充t节点的指针域,把t的指针域重新指向p
}
else
{
printf("节点不存在\n");
}
}
//修改链表节点
void change(LinkList *list,int n)
{
LinkList *t = list;
int i=0;
while(i < n && t != NULL)//循环整个链表
{
t = t->next;
i++;
}
if(t != NULL)
{
printf("输入要修改的值:");
scanf("%d,%s,%f",t->num,t->name,t->score);
}
else
{
printf("节点不存在\n");
}
}
//删除链表节点
void delet(LinkList *list, int n)
{
LinkList *t = list,*p;
int i=0;
while(i < n && t != NULL)//循环整个链表
{
t = t->next;
i++;
}
if(t != NULL)
{
p->next = t->next;
free(t);
}
else
{
printf("节点不存在\n");
}
}
//打印链表
void display(LinkList *h)
{
while (h->next != NULL) {
h = h->next;
printf("%d,%s,%f\n",h->num,h->name,h->score);
}
}
//提供选项的菜单函数
void menu()
{
printf("***************************************************************\n");
printf("* [0] 打印 [1] 插入 [2] 修改 [3]删除 \n");
printf("***************************************************************\n");
}
int main(void)
{
int n,x=1;
LinkList *a;//定义结构体类型变量
printf("输入链表节点的个数:");
scanf("%d",&n);
a=creat(n);
while(x)
{
menu();
printf("给出想要操作的序号:");
scanf("%d",&x);
switch(x)
{
case 0:
display(a);
break;
case 1:
insert(a,n);
break;
case 2:
change(a,n);
break;
case 3:
delet(a,n);
break;
default:
printf("重新输入\n");
break;
}
}
return 0;
}
|