永发信息网

数据结构 急 基础 在线等

答案:1  悬赏:70  手机版
解决时间 2021-04-20 14:27

(一) 编写一个程序ALGO2-1.CPP,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1) 初始化顺序表L;

(2) 依次采用尾插法插入a,b,c,d,e

(3) 输出顺序表L;

(4) 输出顺序表L长度;

(5) 判断顺序表L是否为空;

(6) 判断顺序表L 的第3个元素;

(7) 输出元素‘a’的位置;

(8) 在第4个元素位置上插入‘f’元素;

(9) 输出顺序表L;

(10) 删除L的第3个元素;

(11) 输出顺序表L;

(12) 释放顺序表L;

(二) 编写一个程序ALGO2-2.CPP,实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1) 初始化单链表H;

(2) 依次采用尾插法插入a,b,c,d,e元素;

(3) 输出单链表h;

(4) 输出单链表h的长度;

(5) 判断单链表h是否为空;

(6) 输出单链表h的第三个元素;

(7) 输出元素‘a’的位置;

(8) 在第4个元素位置上插入‘f’元素;

(9) 输出单链表h;

(10) 删除L的第3个元素;

(11) 输出单链表h;

(12) 释放单链表h;

最佳答案

我这里有一个同原理的,你看下


#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0;
struct student
{
char num[10];
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];
};


typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;


void menu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t6作者介绍\n");
printf("\t0退出系统\n");
printf("********************************************************************************\n");
}


void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}


void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
}


void printc()
{
printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n");
}


void printe(Node *p)
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}


Node* Locate(Link l,char findmess[],char nameornum[])
{
Node *r;
if(strcmp(nameornum,"num")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0)
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}


void Add(Link l)
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}


p=(Node *)malloc(sizeof(Node));


strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;

p->next=NULL;
r->next=p;
r=p;
shoudsave=1;


}
}


void Qur(Link l)
{
int sel;
char findmess[20];
Node *p;


if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();


}


void Del(Link l)
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}


void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();


}


void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;


if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}


void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa;
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);


printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Writer()
{
printf(" 我就是传说中的SDDF.啊哈哈\n\n");
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;


ll=(Link)malloc(sizeof(Node));
ll->next=NULL;


if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node));
s->data=p->data;
s->next=NULL;


rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
}


void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
exit(1);
}
p=l->next;


while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}


void main()
{
Link l;
FILE *fp;
int sel;
char ch;
char jian;


int count=0;
Node *p,*r;
printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;


fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n");


while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp))
{
p->next=NULL;
r->next=p;
r=p;
count++;
}
}


fclose(fp);
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);


while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);


if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break;
case 2:Del(l);break;
case 3:Qur(l);break;
case 4:Modify(l);break;
case 5:Save(l);break;
case 6:Writer();break;
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
DNF的复活币怎么买、多少钱?
白露开头诗词,诗句里面带有凌云阁的最好开头
拍拍推广要怎么做?
时风集团去年共生产机器42000台,其中上半年
吉林恒阳水土保持有限公司 吉林省恒利水土保
谁可以给我一个游戏人生的资格
五月中旬去云南旅游要穿什么衣服鞋子
绿钻有什么具体作用?
别克娇车最贵的要几万?
脸大适合卷发么?
问问回答问题的好友怎么加?
邹家畈我想知道这个在什么地方
拨打什么样的符号可以查询天气情况??,
WOW 以前九城网站的那首歌 叫什么
迅雷为什么崩溃,迅雷怎么老是崩溃的?我下电
推荐资讯
好看的搞笑的电影谁帮我推荐几个?
詹姆斯的"骑士"队今年能拿到总冠军吗? 麦迪可
为什么摄像头看不清楚啊
怎么开悬空图
世纪星文体地址在哪,我要去那里办事
最大的人工河是哪个河?
一纸馋纸包鱼纸上火锅在什么地方啊,我要过去
名品皮具在哪里啊,我有事要去这个地方
南通仿真绣研究保护中心这个地址在什么地方,
最毒的蛇是什么蛇?
虔参堂干海参的做法?
世界上那些国家贫富差距最大?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?