choiceTXT.h
//执行要重复的代码,选择执行的醒目并将结果付给choice
#include"stdio.h"
int choiceTXT()
{
int choice;
printf("/n/t请选择你要执行的选项:");
printf("/n===============================/n/n");
printf("/t1.创建/n");
printf("/t2.浏览/n");
printf("/t3.插入/n");
printf("/t4.删除/n");
printf("/t5.退出/n");
printf("/n===============================/n");
printf("/t你要的操作(1-5):");
scanf("%d",&choice);
return choice;
}
int choice()
{
int choice = choiceTXT();
while(1)
{
if((choice < 1) || (choice >5))
{
printf("/n/t你的选择无效!!重新选择。");
choice = choiceTXT();
}
else
{
return choice;
}
}
}
creat.c
#include"stdio.h"
#include"stdlib.h"
#include"define.h"
extern count;
struct stuList *creat()
{
struct stuList *head,*pf,*pc;//pc:当前输入的记录
//pf:前一条记录
int yn=1;
while(yn)
{
pc = (struct stuList *)malloc(sizeof( struct stuList));
if(pc==NULL)
{
printf("/n/tCREAT ERRO!!/n ");
return NULL;
}
printf("/t请输入姓名:");
fflush(stdin);
scanf("%s",pc->stuName);
printf("/t请输入学号:");
fflush(stdin);
scanf("%d",&pc->stuId);
printf("/t请输入成绩:");
fflush(stdin);
scanf("%d",&pc->stSoult);
if(count==0)
head = pf = pc;
else pf->next = pc;//前一条纪律的next指向当前记录
count++;
pc->next = NULL;
pf = pc;
printf("/t是否还要输入:");
scanf("%d",&yn);
if(yn == 0 )
return head;
}
}
define.h
// 定义用于链表的结构
struct stuList
{
char stuName[10];
int stuId;
int stSoult;
struct stuList *next;
};
dele.c
#include"stdio.h"
#include"define.h"
#include"stdlib.h"
struct stuList *dele(struct stuList *head)
{
struct stuList *back,*pf;
int numId;
if(head==NULL)
{
printf("/t NO DELETE BECOUSE OR LIST IS NULL!!");
return NULL;
}
printf("/t请你输入你要删除的的学生学号:");
scanf("%d",&numId);
back = head;
if(head->stuId == numId)
{
back = back->next;
free(head);
return back;
}
pf = back;
back=back->next;
while(back != NULL)
{
if(back->stuId == numId)
{
pf->next=back->next;
free(back);
return head;
}
pf = back;
back=back->next;
}
printf("/n/t没有你要删除的学生:/n");
return head;
}
display.c
#include"stdio.h"
#include"define.h"
void disp(struct stuList *head)
{
struct stuList *pc;
pc = head;
printf("/t姓名/t学号/t成绩/n");
while(pc != NULL)
{
printf("/t%s/t%d/t%d/n",pc->stuName,pc->stuId,pc->stSoult);
pc=pc->next;
}
}
insert.c
#include"stdio.h"
#include"stdlib.h"
#include"define.h"
extern count;
struct stuList * insert(struct stuList *head)
{
struct stuList *pc,*pi,*back;
int numId;
pi = (struct stuList *)malloc(sizeof(struct stuList));
printf("/t要插入学生的姓名:");
fflush(stdin);
scanf("%s",pi->stuName);
printf("/t要插入学生的学号:");
scanf("%d",&pi->stuId);
printf("/t请输入成绩:");
fflush(stdin);
scanf("%d",&pi->stSoult);
if(head==NULL)
{
head=pi;
head->next=NULL;
count++;
return head;
}
printf("/n/t请输入要插入的位置:");
scanf("%d",&numId);
pc = head;
while (pc !=NULL)
{
if(pc->stuId==numId)
{
pi->next = pc->next;
pc->next = pi;
count++;
return head;
}
back=pc;
pc=pc->next;
}
pi->next=NULL;
back->next=pi;
count++;
return head;
}
LinkList.c
#include"stdio.h"
#include"choiceTXT.h"
#include"define.h"
int count=0;
struct stuList *creat();
void disp(struct stuList *head);
struct stuList *insert(struct stuList *head);
struct stuList *dele(struct stuList *head);
void main()
{
struct stuList *head;
int chose;
head=NULL;//初始化指针head;
while(1)
{
chose=choice();
switch(chose)
{
case 1:
head=creat();
break;
case 2:
if(head==NULL)
{
printf("/tLIST IS NULL!!/n");
break;
}else
{
disp(head);
break;
}
case 3:
head=insert(head);
break;
case 4:
head = dele(head);
break;
case 5:
return;
}
}
}