#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define LEN sizeof(struct student)//结构体空间大小
typedef struct student //结构体内容,结点
{
int num;
char name[10];
struct student *next;
}STU;
struct student *create() //创建链表
{
STU *p1,*p2;
STU *head; //头节点
int n = 0;
head = NULL; //初始化
p1 = p2 = (STU*)malloc(LEN); //分配内存空间
printf("输入学号和姓名:");
printf("输入0结束\n");
scanf("%d,%s",&p1->num,p1->name);
while(p1->num != 0)
{
++n;
if(n==1)
head = p1;
p2 = p1; //下一个结点
p1 = (STU*)malloc(LEN);//重新分配空间
printf("输入学号和姓名:");
scanf("%d,%s",&p1->num,p1->name);
p2->next = p1;
}
p2->next = NULL; //尾结点
return head;
}
int print(STU *head) //打印
{
STU *p;
p = head;
if(head == NULL)
printf("NULL");
else
{
do //遍历
{
printf("学号和姓名:");
printf("%d,%s",p->num,p->name);
printf("\n");
p = p->next;
}while(p!=NULL); //跳出条件
}
}
struct student *delete(STU*head) //删除
{
printf("输入想删除的学号:");
STU *p1,*p2; //定义结点
int index;
p1 = head;
if(head==NULL)
printf("NULL");
else
{
scanf("%d",&index);
while(p1->num!=index&&p1->next!=NULL)
{
p2 = p1;
p1=p1->next; //遍历
}
if(p1->num==index)
{
if(p1 == head)
head = p1->next; //删除,跳过所删除的结点
else
p2 -> next = p1 -> next;
free(p1);
}
}
return head;
}
struct student *change(STU *head) //更改
{
printf("输入想要改的学号:");
STU *p;
int index;
int num;
char name[10];
scanf("%d",&index);
p = (STU*)malloc(LEN);
if(head == NULL)
printf("NULL\n");
else
{
p = head;
while(p->next!=NULL&&p->num!=index)
{
p = p->next; //遍历
}
if(p->num == index)
{
printf("输入新的学号和姓名:");
p->num = num;
strcpy(p->name,name);
scanf("%d,%s",&p->num,p->name); //写入
}
else
printf("没有\n");
}
return head;
}
struct student*search(STU*head) //查询
{
printf("输入查询的信息:");
STU *p;
int index;
scanf("%d",&index);
if(head == NULL)
printf("NULL");
else
{
p = head;
while(p->next!=NULL&&p->num!=index)
{
p = p->next;
}
if(p->num==index) //找到所更新的节点
{
printf("%d,%s",p->num,p->name);
printf("\n");
}
}
return head;
}
struct student*add(STU*head) //插入
{
printf("输入在那位学号之后增加:");
STU*p,*p1;
int num;
char name[10];
int index;
scanf("%d",&index);
if(head == NULL)
printf("NULL");
else
{
p = head;
while(p->next!=NULL&&p->num!=index)
{
p = p->next;
}
if(p->num==index)
{
p1 = (STU*)malloc(LEN);
p1->num = num;
strcpy(p1->name,name);
scanf("%d,%s",&p1->num,p1->name); //写入
getchar();
if(p->next==NULL) //所插入节点位置
{
p->next = p1;
p1->next = NULL;
}
else
{
p1->next = p->next;
p->next = p1;
}
}
}
return head;
}
int main()
{
STU *h;
printf("\t****欢迎来到通讯录****\n");
printf("\t 1.创建 \n");
printf("\t 2.删除 \n");
printf("\t 3.更新 \n");
printf("\t 4.增加 \n");
printf("\t 5.查询 \n");
printf("\t 6.打印 \n");
printf("\t 6.退出 \n");
printf("\t**********************\n");
while(1)
{
printf("输入你想要操作:");
int a;
scanf("%d",&a);
switch(a)
{
case 1:
h = create();
break;
case 2:
h = delete(h);
break;
case 3:
h = change(h);
break;
case 4:
h = add(h);
break;
case 5:
search(h);
break;
case 6:
print(h);
break;
case 7:
return 0;
}
}
return 0;
}