要能够执行的代码
什么是链表阿。。。
2楼你得代码执行结果不对
7楼谢谢你,没有更好的答案就选你了
在等等,有更好的答案,在加50分
- 陶小凡
-
=================================================================================
链表概述
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
=================================================================================
学生管理系统源代码:
#include<stdio.h>
const NAME=20;
const N=10;
//学生信息
static struct student
{
int number;
char name[NAME];
int subject[3];
int average;
}st;
//链表的构造
struct sl
{
struct student st;
int next;
}s[N];
//信息输入
int input(struct sl *ps);
//信息输出
void output(struct sl *ps);
//信息的查找
int find(int nu, struct sl *ps);
//信息的删除
int delet(int nu, struct sl *ps);
//信息的修改
int amend(int nu, struct sl *ps);
//菜单
void menu();
//输入的学生人数
static int k=0;
//主函数
void main()
{
struct sl *p;
p=s;
printf("##################################################################### ");
printf("请输入学生的人数:");
scanf("%d", &k);
input(p);
menu();
int sw, nub;
int flag=1;
while(flag)
{
printf(" 菜单选项 (1-5) :");
scanf("%d",&sw);
switch(sw)
{
case 1: printf("检索 ");
printf("number: ");
scanf("%d",&nub);
find(nub,p);
printf("search end!");
break;
case 2: printf("修改 ");
printf("number: ");
scanf("%d",&nub);
amend(nub,p);
printf("modify end!");
break;
case 3: printf("删除 ");
printf("number: ");
scanf("%d",&nub);
delet(nub, p);
printf("delete end!");
break;
case 4: printf("显示 ");
output(p);
break;
case 5: printf("退出 ");
flag=0;
break;
}
}
}
int input(struct sl *ps)
{
ps[0].next=1;
for(int i=1; i<=k; i++)
{
printf("学号:"); scanf("%d",&ps[i].st.number);
printf("姓名:");
scanf("%s", ps[i].st.name);
printf("请输入三门学科的成绩 ");
for(int j=0; j<3; j++)
{
printf("科目%d:",j+1);
scanf("%d", &ps[i].st.subject[j]);
}
printf(" ");
ps[i].next=i+1;
if((ps[i].next)==k+1)
ps[i].next=0;
}
printf("输入结束! ");
return 0;
}
void output(struct sl *ps)
{
struct sl *s;
printf("学生统计显示: ");
s=ps;
int Next=0, i=1;
do
{
Next=s[Next].next;
printf("学号:%d 姓名:%s ", s[Next].st.number, s[Next].st.name);
for(int j=0; j<3; j++)
{
printf("科目%d:%d ", j+1, s[Next].st.subject[j]);
}
printf(" ");
i++;
}while(Next!=0 && i<=k);
printf("显示结束!");
}
int find(int nu, struct sl *ps)
{
int Next=1, i=1;
int flag=0;
do
{
if(ps[Next].st.number==nu)
{
flag=1;
break;
}
Next=ps[Next].next;
i++;
}while(i<=k);
if(!flag)
printf("No Find! ");
else
{ struct sl *s;
s=&ps[Next];
printf("学号:%d 姓名:%s ", s->st.number, s->st.name);
for(int j=0; j<3; j++)
{
printf("科目%d:%d ", j+1, s->st.subject[j]);
}
printf(" ");
}
return flag;
}
int delet(int nu, struct sl *ps)
{
int result;
result=find(nu, ps);
if(result)
{
int Next=0, i=1;
do
{
if(ps[ps[Next].next].st.number==nu)
{
ps[Next].next=ps[ps[Next].next].next;
break;
}
Next=ps[Next].next;
i++;
}while(i<=k);
--k;
return 1;
}
else
return 0;
}
int amend(int nu, struct sl *ps)
{
int Next=1;
int i=1;
if(find(nu, ps))
{ do
{
if(ps[Next].st.number==nu)
break;
Next=ps[Next].next;
i++;
}while(i<=k);
printf("学号:"); scanf("%d", &ps[Next].st.number);
printf(" ");
printf("姓名:");
scanf("%s", ps[Next].st.name);
printf(" ");
printf("三科成绩:"); printf(" ");
for(int j=0; j<3; j++)
{
printf("科目%d:",j+1);
scanf("%d", &ps[Next].st.subject[j]);printf(" ");
}
} return 1;
}
void menu()
{
printf("******************MENU****************** ");
printf("======================================== ");
printf("1.检索 ");
printf("2.修改 ");
printf("3.删除 ");
printf("4.显示 ");
printf("5.退出 ");
printf("========================================= ");
}
=================================================================================
上面的程序在VC++中运行成功,由于搂主是初学,所以程序比较简单,只有添加,检索,修改,删除,显示5个功能.这样便于楼主理解.
悉雨辰寂
- 瑞瑞爱吃桃
- wpBeta
-
我同意5楼的意见,给你源码是害你,你要从基础学起,自己试试,链表不难的
- 左迁
-
#include "stdio.h"
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
int number;
char name[10];
float yuwen;
float yingyu;
float shuxue;
float aver;
struct student *next;
};
typedef struct student node;
typedef node *link;
int n;
/*建立菜单*/
void menu(void)
{printf("---------------主菜单--------------- ");
printf("-------输入"1",输入学生成绩--------- ");
printf("-------输入"2",查询学生成绩--------- ");
printf("-------输入"3",修改学生成绩--------- ");
printf("-------输入"4",添加学生成绩--------- ");
printf("-------输入"5",删除学生成绩--------- ");
printf("-------输入"6",按照平均分排序------- ");
printf("-------输入"7",显示学生成绩--------- ");
printf("-------输入"8",显示全班总平均分----- ");
printf("-------输入"9",退出----------------- ");
}
/*建立数据信息即链表*/
link creat(void)
{
link head,p1,p2;
head=NULL;
n=0;
p1=p2=(link)malloc(sizeof(node));
printf("请输入学号,输入"0"结束: ");
scanf("%d",&p1->number);
while(p1->number)
{
printf("姓名:");
scanf("%s",p1->name);
printf("语文成绩:");
scanf("%f",&p1->yuwen);
printf("英语成绩:");
scanf("%f",&p1->yingyu);
printf("数学成绩:");
scanf("%f",&p1->shuxue);
p1->aver=(p1->yuwen+p1->yingyu+p1->shuxue)/3;
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(link)malloc(sizeof(node));
printf("请输入学号,输入"0"结束: ");
scanf("%d",&p1->number);
}
p2->next=NULL;
return(head);
}
/*查找并显示信息按照学号*/
void find(link head)
{
link p;
int number;
int flag=1;
char c;
if(head==NULL)printf("信息系统为空!无法查询!!!按任意键回到主菜单! ");
else
{
while(flag)
{
printf("请输入要查询学生的学号: ");
scanf("%d",&number);
getchar();
p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("要查找的学号为%d的学生信息如下: ",number);
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f ",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
break;
}
else p=p->next;
}
if(p==NULL)printf("学号为%d的学生不存在! ",number);
printf("是否继续查询?(y/n) ");
scanf("%c",&c);
getchar();
if(c=="n"||c=="N")
{
flag=0;
printf("按任意键回到主菜单! ");
}
}
}
}
/*修改学生成绩信息*/
void modi(link head)
{
link p;
int number;
int tnumber;
char tname[10];
float tyuwen,tyingyu,tshuxue,taver;
int flag=1;
char c;
if(head==NULL)printf("学生成绩系统为空!无法修改!!!按任意键回到主菜单! ");
else
{
while(flag)
{
printf("请输入要修改的学生学号: ");
scanf("%d",&number);
getchar();
p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("学号: ");
scanf("%d",&tnumber);
printf("姓名:");
scanf("%s",tname);
printf("语文成绩:");
scanf("%f",&tyuwen);
printf("英语成绩:");
scanf("%f",&tyingyu);
printf("数学成绩:");
scanf("%f",&tshuxue);
getchar();
taver=(tyuwen+tyingyu+tshuxue)/3;
printf("是否保存?(y/n) ");
scanf("%c",&c);
getchar();
if(c=="y"||c=="Y")
{
p->number=tnumber;
strcpy(p->name,tname);
p->yuwen=tyuwen;
p->yingyu=tyingyu;
p->shuxue=tshuxue;
p->aver=taver;
printf("保存成功! ");
}
break;
}
else p=p->next;
}
if(p==NULL)printf("学号为%d的学生成绩信息不存在!!! ",number);
printf("是否继续修改?(y/n) ");
scanf("%c",&c);
getchar();
if(c=="n"||c=="N")
{
flag=0;
printf("按任意键回到主菜单! ");
}
}
}
}
/*插入学生信息*/
link insert(link head)
{
link p,p1;
int flag=1;
char c;
while(flag)
{
p=(link)malloc(sizeof(node));
printf("输入学号: ");
scanf("%d",&p->number);
printf("姓名:");
scanf("%s",p->name);
printf("语文成绩:");
scanf("%f",&p->yuwen);
printf("英语成绩:");
scanf("%f",&p->yingyu);
printf("数学成绩:");
scanf("%f",&p->shuxue);
getchar();
p->aver=(p->yuwen+p->yingyu+p->shuxue)/3;
if(head==NULL)head=p;
else
{
p1=head;
while(p1->next!=NULL)p1=p1->next;
p1->next=p;
}
p->next=NULL;
n++;
printf("插入学生信息如下: ");
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f ",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
printf("是否继续插入?(y/n) ");
scanf("%c",&c);
getchar();
if(c=="n"||c=="N")
{
flag=0;
printf("按任意键回到主菜单! ");
}
}
return(head);
}
/*删除学生信息*/
link del(link head)
{
link p,p2;
int flag=1;
int number;
char c;
if(head==NULL)printf("信息系统为空!无法删除!!!按任意键回到主菜单! ");
else
{
while(flag)
{
printf("输入要删除的学生学号: ");
scanf("%d",&number);
getchar();
p2=p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("要删除的学号为%d的学生信息如下: ",number);
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f ",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
printf("是否确定删除?(y/n) ");
scanf("%c",&c);
getchar();
if(c=="y"||c=="Y")
{
if(p==head)head=p->next;
else p2->next=p->next;
n--;
printf("删除成功!! ");
}
break;
}
else
{
p2=p;
p=p->next;
}
}
if(p==NULL)printf("学号为%d的学生信息不存在!!! ",number);
if(head==NULL)
{
printf("信息系统为空,无法继续删除! ");
getchar();
break;
}
printf("是否继续删除?(y/n )");
scanf("%c",&c);
getchar();
if(c=="n"||c=="N")flag=0;
printf("按任意键回到主菜单! ");
}
}
return(head);
}
/*输出学生成绩信息*/
void print(link head)
{
link p;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单! ");
else
{
printf("一共有%d个学生的信息: ",n);
p=head;
while(p)
{
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f ",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
p=p->next;
}
printf("按任意键回到主菜单! ");
}
}
/*用选择法排序*/
link sort(link head)
{
link beforep,p,p1,k,beforek,temp;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单! ");
else
{p=head;
while(p->next!=NULL)
{
k=p;
p1=p->next;
while(p1!=NULL)
{
if(k->aver<p1->aver)k=p1;
p1=p1->next;
}
if(k!=p)
{
beforek=head;
while(beforek->next!=k)beforek=beforek->next;
if(p==head)head=k;
else beforep->next=k;
beforek->next=p;
temp=k->next;
k->next=p->next;
p->next=temp;
p=k;
}
beforep=p;
p=p->next;
}
printf("排序成功,按任意键回到主菜单! ");
}
return(head);
}
/*求全班总平均分并显示*/
void average(link head)
{
float toaver,sum=0;
int num=0;
link p;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单! ");
else
{
p=head;
while(p!=NULL)
{
sum+=p->aver;
num++;
p=p->next;
}
toaver=sum/num;
printf("全班总平均分是:%7.2f ",toaver);
printf("按任意键回到主菜单! ");
}
}
void main()
{
int k;
int flag=1;
link head=NULL;
while(1)
{
menu();
flag=1;
while(flag)
{
printf("请输入:(1~9) ");;
scanf("%d",&k);
getchar();
if(k>=1&&k<=9)flag=0;
else printf("输入错误! ");
}
switch(k)
{
case 1:head=creat();break;
case 2:find(head);break;
case 3:modi(head);break;
case 4:head=insert(head);break;
case 5:head=del(head);break;
case 6:head=sort(head);break;
case 7:print(head);break;
case 8:average(head);break;
case 9:return;
}
getch();
}
}
- tt白
-
什么是链表都不知道你要这代码也没有用啊,从基础学起吧
- meira
-
........问得好啊~
惊起啊声一片~
- 皮皮
-
历害,那么长谁看得懂!!
- wio
-
看看这个
- S笔记
-
厉害啊!