|
有些相似 可以看看
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
//链表单元定义,链表相关变量
struct student
{
int id;
float score;
struct student *next;
} *head,*pthis;
//输入数据创建链表
void input()
{
struct student *tmp;
printf("\n\n请输入新的学生信息:\n");
do
{
printf("ID\t学生信息\n");//学生信息: 如成绩 学号等 int类型
if((tmp=(struct student*)malloc(sizeof(struct student)))==NULL)
{
printf("\n错误!不能申请所需的内存!\n");
exit(0);
}
scanf("%d\t%f",&tmp->id,&tmp->score);
tmp->next=NULL;
if(tmp->id!=0)
{
if(head==NULL)
{
head=tmp;
pthis=head;
}
else
{
pthis->next=tmp;
pthis=pthis->next;
}
}
}
while(tmp->id!=0);
free(tmp);
}
//列表输出链表中的所有项
void list()
{
printf("\n\n数据列表\n");
printf("ID\t学生信息\n");
printf("-------------------------------\n");
if(head==NULL)
{
printf("错误,没有数据!\n");
return;
}
pthis=head;
while(pthis!=NULL)
{
printf("%d\t%.2f\n",pthis->id,pthis->score);
pthis=pthis->next;
}
}
//插入数据
void insert()
{
int i,p;
struct student *tmp;
if(head==NULL)
{
printf("\n\n数据不存在,无法插入!\n");
return;
}
printf("\n请输入插入点:\n");
scanf("%d",&p);
if(p<0)
{
printf("输入不合法!");
return;
}
printf("\n\n请输入新信息:\nID学生信息\t\n");
if((tmp=(struct student*)malloc(sizeof(struct student)))==NULL)
{
printf("\n错误!不能申请所需的内存!\n");
exit(0);
}
scanf("%d\t%f",&tmp->id,&tmp->score);
tmp->next=NULL;
if(tmp->id!=0)
{
pthis=head;
if(p==0)
{
tmp->next=head;
head=tmp;
}
else
{
for(i=0;i<p-1;i++)
{
if(pthis->next->next==NULL)
{
printf("\n找不到插入点,您输入的数据太大!\n");
return;
}
pthis=pthis->next;
}
tmp->next=pthis->next;
pthis->next=tmp;
}
}
else
{
printf("\n数据无效!\n");
free(tmp);
}
}
//删除数据
void del()
{
int p,i;
struct student *tmp;
if(head==NULL)
{
printf("\n\n没有数据,无法删除!\n");
return;
}
printf("\n\n请输入要删除的学生学号:\n");
scanf("%d",&p);
if(p<0)
{
printf("\n输入不合法!\n");
return;
}
if(p==0)
{
pthis=head;
head=pthis->next;
free(pthis);
pthis=head;
}
else
{
pthis=head;
for(i=0;i<p-1;i++)
{
pthis=pthis->next;
if(pthis->next==NULL)
{
printf("\n\n指定记录不存在,无法删除!\n");
return;
}
}
tmp=pthis->next;
pthis->next=pthis->next->next;
free(tmp);
}
}
//程序主函数
void main()
{
char command=0;
int id=0;
//主循环
do
{
printf("\n\n\t 菜单\n");
printf("-------------------------------\n");
printf("\tE,输入数据\n");
printf("\tL,数据列表\n");
printf("\tI,插入记录\n");
printf("\tD,删除记录\n");
printf("\tG,退出系统\n");
printf("-------------------------------\n");
printf("\t请选择:");
command=getch();
//命令处理
switch(command)
{
case 'E':
if(head==NULL)
{
input();
break;
}
else
{
printf("\n\n学生信息数据已经存在!\n");
break;
}
case 'L':
list();
break;
case 'I':
insert();
break;
case 'D':
del();
break;
}
}
while(command!='G');
} |
|