📄 1.cpp
字号:
#include<malloc.h>
#include<stdio.h>
#define TRUE 1
#define NULL 0
#define LEN sizeof(struct node)
/*定义结构体*/
typedef struct node
{
int ID;/*学生学号*/
char name[20];/*学生姓名*/
int maths;/*数学成绩*/
int com;/*计算机成绩*/
struct node *next;
};
int n;
struct node *la;/*初始化链表*/
struct node *make()
/*构造一个链表*/
{
struct node *head;
struct node *h,*p2;
n=0;
printf("\t\t\t请输入学生信息\n");
h=p2=(struct node *)malloc(LEN);
printf("请输入学号:\t");
scanf("%d",&h->ID);
printf("请输入姓名:\t");
scanf("%s",h->name);
printf("请输入数学成绩:\t");
scanf("%d",&h->maths);
printf("请输入计算机成绩:\t");
scanf("%d",&h->com);
head=NULL;
while (h->ID!=0)
{
n=n+1;
if(n==1)head=h;
else p2->next=h;
p2=h;
h=(struct node *)malloc(LEN);
printf("请输入学号:\t");
scanf("%d",&h->ID);
if(h->ID==0)break;
printf("请输入姓名:\t");
scanf("%s",h->name);
printf("请输入数学成绩:\t");
scanf("%d",&h->maths);
printf("请输入计算机成绩:\t");
scanf("%d",&h->com);
}
p2->next=NULL;
return(head);
}
void print()
/*输出*/
{
struct node *h;
int i;i=1;
h=la;
printf("总共有%d名学生\n",n);
printf("序号 学号 姓名 数学成绩 计算机成绩\n ");
while(h!=NULL&&i<=n)
{
printf(" %d \t\t %d\t %s\t\t%d\t\t %d",i,h->ID,h->name,h->maths,h->com);
printf("\n");
i++;
h=h->next;
}
}
sort()
/*排序*/
{
struct node *h,*p,*q,*r,*s;
h=p=(struct node *)malloc(sizeof(struct node));
p->next=la;
while(p->next!=NULL)
{
r=p;
q=p->next;
while(q->next!=NULL)
{
if(q->next->ID<r->next->ID)
r=q;
q=q->next;
}
if(r!=p)
{
s=r->next;
r->next=s->next;
s->next=p->next;
p->next=s;
}
p=p->next;
}
la=h->next;
free(h);
print();
}
void search()
/*查询*/
{
struct node *p;
int i;
p=la;
printf("请输入要查询的学号:\t");
scanf("%d",&i);
while(NULL!=p)
{
if(i==p->ID)
printf(" %d %s %d %d\n",p->ID,p->name,p->maths,p->com);
p=p->next;
}
}
void insert()
/*在链表头部插入*/
{ struct node *p,*s;
s=(struct node *)malloc(sizeof(struct node));
n=n+1;
printf("请输入学号:\t");
scanf("%d",&s->ID);
printf("请输入姓名:\t");
scanf("%s",s->name);
printf("请输入数学成绩:\t");
scanf("%d",&s->maths);
printf("请输入计算机成绩:\t");
scanf("%d",&s->com);
s->next=la;
la=s;
print();
}
struct node *getlist(int i)
/*在单链表中查找第i个元素结点,找到后返回其指针,否则返回空*/
{ struct node *p;
int j;j=0;
i=i-1;
p=la;
while(p->next!=NULL&&j<i)
{
p=p->next;j++;
}
if(j==i) return p;
else return NULL;
}
void deletelist()
/*删除单链表上的第i个数据结点*/
{ int i;
struct node *p,*s;
n=n-1;
printf("请输入要删除的学生的序号:\t");
scanf("%d",&i);
p=getlist(i-1);/*查找第i-1个结点*/
if(p==NULL)
{printf("not exit\n");}
else if(p->next==NULL)
{printf("next is not exist\n");}
else
{
s=p->next;/*s指向第i-1个结点*/
p->next=s->next;/*从链表中删除*/
free(s);/*释放s*/
print();
}
}
void main()
{
int loop,i;
loop=TRUE;
while(loop)
{
printf("\t\t\t-----0.退出-----\n");
printf("\t\t\t-----1.输入-----\n");
printf("\t\t\t-----2.输出-----\n");
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请按0结束学号输入!\n");
scanf("%d",&i);
switch(i)
{
case 0:loop=NULL;break;
case 1:la=make();break;
case 2:print();break;
case 3:sort();break;
case 4:search();break;
case 5:insert();break;
case 6:deletelist();break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -