#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE sizeof(STU)
typedef struct student
{
int no;
char name[10]; //姓名要用数组表示
int n; //不能用着一变量计数,因为每一个节点n 不同****
int cj;
struct student *next;
} STU;
STU * head;
void menu(); //菜单
void choice();
STU *creat();
STU *cazhao(STU *head); //创建
STU* add1(STU *head); //在结尾添加
STU* add2(STU *head); //在中间加入
STU *del(STU *head); //删除
STU *destory(STU *head); //销毁
STU *bianl(STU *head); //遍历
void menu()
{
printf("\t\t***********\n");
printf("\t\t*1创建链表*\n");
printf("\t\t*2删除链表*\n");
printf("\t\t*3销毁链表*\n");
printf("\t\t*4遍历链表*\n");
printf("\t\t*5增加链表*\n");
printf("\t\t*6插入链表*\n");
printf("\t\t*7查找链表*\n");
printf("\t\t***********\n");
}
void choice()
{
int i;
while(1)
{
menu();
printf("please input your chao zuo\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
system("color 65");
head=creat(); //要有返回值
break;
}
case 2:
{
system("color 75");
del(head); //传值
break;
}
case 3:
{
system("color 63");
destory(head);
break;
}
case 4:
{
system("color 59");
bianl(head);
break;
}
case 5:
{
system("color 29");
add1(head);
break;
}
case 6:
{
system("color 78");
add2(head);
break;
}
case 7:
{
system("color 78");
cazhao(head);
break;
}
default:
{
system("color 45");
exit(0);
}
}
system("color 65");
system("pause");
system("cls");
}
}
STU * creat()
{
/* printf("输入你要创建的节点数");
scanf("%d",&i);*/
STU *p1,*p2;
head=(STU*)malloc(SIZE);
//head->next =NULL;
p2=head;
p1=(STU *)malloc(SIZE);
p1->n =0;
scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );//一定要加&
while(p1->no != NULL)
{
(p1->n )++;
// p1->next =NULL;
p2->next =p1;
p2=p1;
p1=(STU*)malloc(SIZE);
scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );
}
p2->next =NULL;
return head;
}
STU *add1(STU *head)
{
// int i;
// int j;
STU *node;
printf("输入你要增加节点的信息");
// scanf("%d",&i);
STU *p;
node=(STU*)malloc(SIZE);
scanf("%d%s%d",&node->no ,node->name ,&node->cj );
p=head;
while(p->next)
{
p=p->next ;
}
if(p->next == NULL)
{
p->next =node;
node->next =NULL;
printf("添加成功");
}
return(head);
}
STU *add2(STU *head)
{
STU *p,*q;
STU *node;
p=head;
int m;
int i;
printf("输入你要加入的位置");
scanf("%d",&i);
node=(STU *)malloc(SIZE);
scanf("%d%s%d",&node->no ,node->name ,&node->cj );
m=1;
while(m!=i)
{
m++;
p=p->next ;
}
if(m==i)
{
node->next =p->next ;
p->next =node;
printf("添加成功");
}
return head;
}
STU *del(STU *head)
{
STU *p,*q;
int i;
p=head;
printf("输入你要删除的成绩");
scanf("%d",&i);
while((p->no) !=i)
{
q=p;
p=p->next;
}
if((p->no) ==i)
{
q->next =p->next ;
free(p);
printf("删除成功");
}
else
{
printf("NONO");
}
return head;
}
STU *cazhao(STU *head)
{
int i=1;
int n;
STU *p;
p=head->next ;
printf("输入你要查找的节点");
scanf("%d",&n);
while(i!=n)
{
p=p->next ;
i++;
}
if(i==n)
{
printf("%d %s %d\n",p->no,p->name ,p->cj );
}
return head;
}
STU *destory(STU *head)
{
STU *p,*ptr;
p=head;
while(p->next !=NULL)
{
ptr=p;
p=p->next ;
free(ptr);
ptr->next =NULL;
printf("销毁成功");
}
return head;
}
STU *bianl(STU *head)
{
STU *p;
p=head;
printf("便历\n");
p=p->next ;
while(p)
{
printf("%d %s %d\n",p->no ,p->name ,p->cj );
p=p->next ;
}
return head;
}
int main()
{
choice();
return 0;
}
***********************
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE (struct student *)malloc(sizeof(struct student))
typedef struct student
{
int no;
char name[20];
float grade;
struct student *next;
}S;
S *head;
void choice();
void menu1();
S *init();
S *add1(S *head);
S *add2(S *head);
S *seek(S *head);
S *del(S *head);
S *bianli(S *head);
S *destory(S *head);
void menu1()
{
printf("\t\t\t*****菜单*****\n");
printf("\t\t\t* 0.增加2链表*\n");//mowei
printf("\t\t\t* 1.创建链表 *\n");
printf("\t\t\t* 2.增加1链表*\n");//zhongjian
printf("\t\t\t* 3.查找链表 *\n");
printf("\t\t\t* 4.删除链表 *\n");
printf("\t\t\t* 5.遍历链表 *\n");
printf("\t\t\t* 6.销毁链表 *\n");
printf("\t\t\t* 7.退出 *\n");
printf("\t\t\t**************\n");
}
S *add1(S *head)
{
int m;
printf("请输入你增加的位置");
scanf("%d",&m);
S *p1,*node;
node=SIZE;
scanf("%d%s%f",&node->no ,node->name ,&node->grade );
node->next =NULL;
p1=head ;
while(--m)
{
p1=p1->next ;
}
node->next =p1->next ;
p1->next =node;
return head;
}
S *add2(S *head)
{
S *p1,*node;
p1=head;
node=SIZE;
scanf("%d %s %f",&node->no ,node->name ,&node->grade );
node->next =NULL;
while(p1->next)
{
p1=p1->next;
}
if(p1->next==NULL)
{
p1->next=node;
}
return head;
}
S *del(S *head)
{
int w;
printf("请输入你要删除的学号\n");
scanf("%d",&w);
S *p1,*p2;
p2=p1=head;
while(p1->next)
{ p2=p1;
p1=p1->next;
// p2=p1;
if(p1->no==w)
{
p2->next=p1->next;
free(p1);
break;
}
}
return head;
}
S *bianli(S *head)
{
S *p1;
p1=head;
p1=p1->next;
while(p1->next)
{
printf("%d %s %f\n",p1->no,p1->name,p1->grade);
p1=p1->next;
}
return head;
}
S *destory(S *head)
{
S *p1,*p2;
p2=p1=head;
p1=p1->next;
free(p2);
p2=p1;
return head;
}
S *init()
{
S *p1,*p2;
p1=p2=head=SIZE;
p1=SIZE;
scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade );
p1->next =NULL;
p2->next =p1;
p2=p1;
while(p1->no !=0)
{
p1=SIZE;
scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade );
p1->next =NULL;
p2->next =p1;
p2=p1;
}
return head;
}
S *seek(S *head)
{
int sno;
S *p1,*p2;
p2=p1=head->next ;
printf("请输入你要查找的学号");
scanf("%d",&sno);
while(p1->next )
{
p1=p1->next ;
if(p1->no ==sno)
{
printf("%d %s %f",p1->no ,p1->name ,p1->grade );
break;
}
}
return head;
}
void choice()
{
while(1)
{
system("cls");
menu1();
int n;
printf("请输入你要进行的操作");
scanf("%d",&n);
switch(n)
{
case 0:
{
add2(head);
break;
}
case 1:
{
head=init();
printf("创建成功\n");
break;
}
case 2:
{
add1(head);
break;
}
case 3:
{
seek(head);
system("pause");
break;
}
case 4:
{
del(head);
system("pause");
break;
}
case 5 :
{
bianli(head);
system("pause");
break;
}
case 6:
{
destory(head);
printf("销毁成功\n");
system("pause");
break;
}
case 7:
{
exit(0);
break;
}
default :
{
printf("请重新输入");
break;
}
}
}
}
int main()
{
choice();
return 0;
}
#include<stdlib.h>
#include<string.h>
#define SIZE sizeof(STU)
typedef struct student
{
int no;
char name[10]; //姓名要用数组表示
int n; //不能用着一变量计数,因为每一个节点n 不同****
int cj;
struct student *next;
} STU;
STU * head;
void menu(); //菜单
void choice();
STU *creat();
STU *cazhao(STU *head); //创建
STU* add1(STU *head); //在结尾添加
STU* add2(STU *head); //在中间加入
STU *del(STU *head); //删除
STU *destory(STU *head); //销毁
STU *bianl(STU *head); //遍历
void menu()
{
printf("\t\t***********\n");
printf("\t\t*1创建链表*\n");
printf("\t\t*2删除链表*\n");
printf("\t\t*3销毁链表*\n");
printf("\t\t*4遍历链表*\n");
printf("\t\t*5增加链表*\n");
printf("\t\t*6插入链表*\n");
printf("\t\t*7查找链表*\n");
printf("\t\t***********\n");
}
void choice()
{
int i;
while(1)
{
menu();
printf("please input your chao zuo\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
system("color 65");
head=creat(); //要有返回值
break;
}
case 2:
{
system("color 75");
del(head); //传值
break;
}
case 3:
{
system("color 63");
destory(head);
break;
}
case 4:
{
system("color 59");
bianl(head);
break;
}
case 5:
{
system("color 29");
add1(head);
break;
}
case 6:
{
system("color 78");
add2(head);
break;
}
case 7:
{
system("color 78");
cazhao(head);
break;
}
default:
{
system("color 45");
exit(0);
}
}
system("color 65");
system("pause");
system("cls");
}
}
STU * creat()
{
/* printf("输入你要创建的节点数");
scanf("%d",&i);*/
STU *p1,*p2;
head=(STU*)malloc(SIZE);
//head->next =NULL;
p2=head;
p1=(STU *)malloc(SIZE);
p1->n =0;
scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );//一定要加&
while(p1->no != NULL)
{
(p1->n )++;
// p1->next =NULL;
p2->next =p1;
p2=p1;
p1=(STU*)malloc(SIZE);
scanf("%d%s%d",&p1->no ,p1->name ,&p1->cj );
}
p2->next =NULL;
return head;
}
STU *add1(STU *head)
{
// int i;
// int j;
STU *node;
printf("输入你要增加节点的信息");
// scanf("%d",&i);
STU *p;
node=(STU*)malloc(SIZE);
scanf("%d%s%d",&node->no ,node->name ,&node->cj );
p=head;
while(p->next)
{
p=p->next ;
}
if(p->next == NULL)
{
p->next =node;
node->next =NULL;
printf("添加成功");
}
return(head);
}
STU *add2(STU *head)
{
STU *p,*q;
STU *node;
p=head;
int m;
int i;
printf("输入你要加入的位置");
scanf("%d",&i);
node=(STU *)malloc(SIZE);
scanf("%d%s%d",&node->no ,node->name ,&node->cj );
m=1;
while(m!=i)
{
m++;
p=p->next ;
}
if(m==i)
{
node->next =p->next ;
p->next =node;
printf("添加成功");
}
return head;
}
STU *del(STU *head)
{
STU *p,*q;
int i;
p=head;
printf("输入你要删除的成绩");
scanf("%d",&i);
while((p->no) !=i)
{
q=p;
p=p->next;
}
if((p->no) ==i)
{
q->next =p->next ;
free(p);
printf("删除成功");
}
else
{
printf("NONO");
}
return head;
}
STU *cazhao(STU *head)
{
int i=1;
int n;
STU *p;
p=head->next ;
printf("输入你要查找的节点");
scanf("%d",&n);
while(i!=n)
{
p=p->next ;
i++;
}
if(i==n)
{
printf("%d %s %d\n",p->no,p->name ,p->cj );
}
return head;
}
STU *destory(STU *head)
{
STU *p,*ptr;
p=head;
while(p->next !=NULL)
{
ptr=p;
p=p->next ;
free(ptr);
ptr->next =NULL;
printf("销毁成功");
}
return head;
}
STU *bianl(STU *head)
{
STU *p;
p=head;
printf("便历\n");
p=p->next ;
while(p)
{
printf("%d %s %d\n",p->no ,p->name ,p->cj );
p=p->next ;
}
return head;
}
int main()
{
choice();
return 0;
}
***********************
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE (struct student *)malloc(sizeof(struct student))
typedef struct student
{
int no;
char name[20];
float grade;
struct student *next;
}S;
S *head;
void choice();
void menu1();
S *init();
S *add1(S *head);
S *add2(S *head);
S *seek(S *head);
S *del(S *head);
S *bianli(S *head);
S *destory(S *head);
void menu1()
{
printf("\t\t\t*****菜单*****\n");
printf("\t\t\t* 0.增加2链表*\n");//mowei
printf("\t\t\t* 1.创建链表 *\n");
printf("\t\t\t* 2.增加1链表*\n");//zhongjian
printf("\t\t\t* 3.查找链表 *\n");
printf("\t\t\t* 4.删除链表 *\n");
printf("\t\t\t* 5.遍历链表 *\n");
printf("\t\t\t* 6.销毁链表 *\n");
printf("\t\t\t* 7.退出 *\n");
printf("\t\t\t**************\n");
}
S *add1(S *head)
{
int m;
printf("请输入你增加的位置");
scanf("%d",&m);
S *p1,*node;
node=SIZE;
scanf("%d%s%f",&node->no ,node->name ,&node->grade );
node->next =NULL;
p1=head ;
while(--m)
{
p1=p1->next ;
}
node->next =p1->next ;
p1->next =node;
return head;
}
S *add2(S *head)
{
S *p1,*node;
p1=head;
node=SIZE;
scanf("%d %s %f",&node->no ,node->name ,&node->grade );
node->next =NULL;
while(p1->next)
{
p1=p1->next;
}
if(p1->next==NULL)
{
p1->next=node;
}
return head;
}
S *del(S *head)
{
int w;
printf("请输入你要删除的学号\n");
scanf("%d",&w);
S *p1,*p2;
p2=p1=head;
while(p1->next)
{ p2=p1;
p1=p1->next;
// p2=p1;
if(p1->no==w)
{
p2->next=p1->next;
free(p1);
break;
}
}
return head;
}
S *bianli(S *head)
{
S *p1;
p1=head;
p1=p1->next;
while(p1->next)
{
printf("%d %s %f\n",p1->no,p1->name,p1->grade);
p1=p1->next;
}
return head;
}
S *destory(S *head)
{
S *p1,*p2;
p2=p1=head;
p1=p1->next;
free(p2);
p2=p1;
return head;
}
S *init()
{
S *p1,*p2;
p1=p2=head=SIZE;
p1=SIZE;
scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade );
p1->next =NULL;
p2->next =p1;
p2=p1;
while(p1->no !=0)
{
p1=SIZE;
scanf("%d%s%f",&p1->no ,p1->name ,&p1->grade );
p1->next =NULL;
p2->next =p1;
p2=p1;
}
return head;
}
S *seek(S *head)
{
int sno;
S *p1,*p2;
p2=p1=head->next ;
printf("请输入你要查找的学号");
scanf("%d",&sno);
while(p1->next )
{
p1=p1->next ;
if(p1->no ==sno)
{
printf("%d %s %f",p1->no ,p1->name ,p1->grade );
break;
}
}
return head;
}
void choice()
{
while(1)
{
system("cls");
menu1();
int n;
printf("请输入你要进行的操作");
scanf("%d",&n);
switch(n)
{
case 0:
{
add2(head);
break;
}
case 1:
{
head=init();
printf("创建成功\n");
break;
}
case 2:
{
add1(head);
break;
}
case 3:
{
seek(head);
system("pause");
break;
}
case 4:
{
del(head);
system("pause");
break;
}
case 5 :
{
bianli(head);
system("pause");
break;
}
case 6:
{
destory(head);
printf("销毁成功\n");
system("pause");
break;
}
case 7:
{
exit(0);
break;
}
default :
{
printf("请重新输入");
break;
}
}
}
}
int main()
{
choice();
return 0;
}