数据结构第一次作业word版本.docx
- 文档编号:5578819
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:27
- 大小:124.04KB
数据结构第一次作业word版本.docx
《数据结构第一次作业word版本.docx》由会员分享,可在线阅读,更多相关《数据结构第一次作业word版本.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构第一次作业word版本
数据结构第一次作业
数据结构第一次作业
1.源程序
#include
#include
#include
#include
#include
typedefstruct
{
intno;
charname[100];
charSnumber[20];
charPnumber[20];
charQQ[20];
charsex[50];
}student;//学生信息的类型
typedefstudentelemptype;
typedefstructnode
{
elemptypedata;
structnode*next;
}linklist;//定义单链表
linklist*head;//定义单链表头
intstart()//控制linklist*creatlist()的结束
{
charn[10]="end";charstr1[10];
printf("结束输入end,否则请按回车!
\n\n");
printf("请输入:
");gets(str1);printf("\n\n");
if(strcmp(n,str1)==0)
{getchar();return(0);}
else
{getchar();return
(1);}
}
linklist*creatlist()
{
inta;
charch[10];
elemptypex;
linklist*head,*r,*p;
p=(linklist*)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
while
(1)
{
printf("\n请输入学号:
\n");
scanf("%d",&x.no);
printf("\n请输入姓名:
\n");
scanf("%s",&x.name);
getchar();
printf("\n请输入专业\n");
scanf("%s",&x.Snumber);
getchar();
printf("\n请输入电话号码\n");
scanf("%s",&x.Pnumber);
getchar();
printf("\n请输入QQ\n");
scanf("%s",&x.QQ);
getchar();
printf("\n请输入性别\n");
scanf("%s",&x.sex);
getchar();
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
a=start();
if(a==0)break;
system("pause");
system("cls");
}
return(head);
}
voidinsert(linklist*head,intx,elemptypey)
{
linklist*q,*p,*r;
r=(linklist*)malloc(sizeof(linklist));
r->data=y;
if(head->next==NULL)
{
head->next=r;
r->next=NULL;
}
else
{
q=head;p=head->next;
while((p!
=NULL)&&(p->data.no!
=x))
{
q=p;p=p->next;
}
if(p!
=NULL)
{
q->next=r;
r->next=p;
}
else
{
q->next=r;
r->next=NULL;
}
}
}
linklist*del(linklist*head,inti)
{
intj=0;
linklist*p,*s,*q;
p=head;
j=0;
while((p->next!
=NULL)&&(j {p=p->next;j++;} if(p->next! =NULL) { q=p->next; p->next=p->next->next; free(q); } else returnNULL; s=head; returns; } linklist*locate(linklist*head,intk) { linklist*s; s=head->next; while(s! =NULL) if(s->data.no! =k) s=s->next; else break; returns; } linklist*get(linklist*head,inti) { intj; linklist*p; p=head;j=0; while((p->next! =NULL)&&(j { p=p->next; j++; } if((i==j)&&(i! =0))returnp; else returnNULL; } voidoutlin(linklist*h) { linklist*p; p=h->next; while(p! =NULL) { printf("%d,%s,%s,%s,%s,%s\n",p->data.no,p->data.name,p->data.Snumber,p->data.Pnumber,p->data.QQ,p->data.sex); p=p->next; } printf("\n输出结束\n"); } voidMenu_one() //主菜单 { printf("\n\n\n\n\n\n\n"); printf("*************************************************\n"); printf("存储学生信息的线性表\n\n"); printf("1、用单链表来创建\n"); printf("2、用顺序表来创建\n"); printf("3、返回\n"); printf("**************************************************\n"); printf("\n\n\n\t\t"); } voidMenu_two_2() //次菜单 { printf("\n\n\n\n\n\n\n"); printf("*************************************************\n"); printf("用单链表存储学生信息\n\n"); printf("1、录入学生信息(只能录入一次! )\n"); printf("2、往线性表插入一个信息\n"); printf("3、在线性表中删除一个信息\n"); printf("4、按值检索\n"); printf("5、按序号检索\n"); printf("6、遍历线性表\n"); printf("7、退出\n"); printf("**************************************************\n"); printf("\n\n\n\t\t"); } voidmain_switch_2(charj) { inti; linklist*k; elemptypem,n; inta,b; switch(j){ case'1': { printf("请添加学生信息\n"); head=creatlist(); outlin(head); system("pause"); system("cls"); }break; case'2': { printf("\n在第几个信息之前插入? (输入学号)"); printf("\n请输入: "); scanf("%d",&m.no); printf("\n\n\n准备插入的新信息\n\n\n"); printf("\n请输入学号: \n"); scanf("%d",&n.no); printf("\n请输入姓名: \n"); scanf("%s",&n.name); printf("\n请输入专业\n"); scanf("%s",&n.Snumber); printf("\n请输入电话号码\n"); scanf("%s",&n.Pnumber); printf("\n请输入QQ\n"); scanf("%s",&n.QQ); printf("\n请输入性别\n"); scanf("%s",&n.sex); insert(head,m.no,n); printf("\n\n新的学生信息表\n"); outlin(head); system("pause"); system("cls"); }break; case'3': { outlin(head); printf("\n请输入要删除第几个信息: \n"); scanf("%d",&a); printf("\n新的信息表\n"); del(head,a); outlin(head); system("pause"); system("cls"); }break; case'4': { printf("\n请输入你要查找的学号: \n"); scanf("%d",&a); k=locate(head,a); printf("%d,%s,%s,%s,%s,%s\n",k->data.no,k->data.name,k->data.Snumber,k->data.Pnumber,k->data.QQ,k->data.sex); system("pause"); system("cls"); }break; case'5': { printf("\n请输入你要查找的序号: \n"); scanf("%d",&a); k=get(head,a); printf("%d,%s,%s,%s,%s,%s\n",k->data.no,k->data.name,k->data.Snumber,k->data.Pnumber,k->data.QQ,k->data.sex); system("pause"); system("cls"); }break; case'6': { printf("\n学生信息表\n\n"); outlin(head); system("pause"); system("cls"); }break; case'7': exit(0); } } intmain1() { chara[100]; head=(linklist*)malloc(sizeof(linklist)); head->next=NULL;//生成头结点 while (1) { Menu_two_2(); printf("\n\t请输入功能编号: "); gets(a); system("pause"); system("cls"); if(a[1]! ='\0') { printf("\n输入错误\n"); system("pause"); system("cls"); continue; } else { if(a[0]=='0') break; main_switch_2(a[0]); } } return0; } //-------以下为顺序表的函数-------------------------------------------------- usingnamespacestd; structstudent1 { intid;//学号 charname[30];//姓名 charsex[2];//性别 charPnumber[20]; charQQ[20]; floatgread;//成绩 }; typedefstructstudent1DataType;//指定structstudent为DataType structSeqList { intMAX;//顺序表中最大元素的个数 intcount;//存放线性表中元素的个数count<=MAXLENGTH DataType*element;//element[0],element[1],...,element[n-1]存放线性表中的元素 DataType*m; }; typedefstructSeqList*MySeqList; //初始化并创建空顺序表 //功能: 在顺序表中求某元素的下标,没有查找到,则返回-1 intlocateSeqList(MySeqListmySeqList,intid) { for(inti=0;i if(mySeqList->element[i].id==id)//传入一个元素x,查找到后返回下标i return(i); return(-1); } intupdateSeqList(MySeqListmySeqList,intid)//学生信息修改 { intiRc=locateSeqList(mySeqList,id); if(iRc==-1) { printf("不存在指定下标! \n"); return(0); } cout<<"姓名: "; cin>>mySeqList->element[iRc].name; cout<<"学号: "; cin>>mySeqList->element[iRc].id; cout<<"性别: "; cin>>mySeqList->element[iRc].sex; cout<<"电话: "; cin>>mySeqList->element[iRc].Pnumber; cout<<"QQ: "; cin>>mySeqList->element[iRc].QQ; cout<<"成绩: "; cin>>mySeqList->element[iRc].gread; return1; } //功能: 创建空顺序表 MySeqListinitSeqList(intm) { MySeqListmySeqList=(MySeqList)malloc(sizeof(structSeqList));//分配内存空间 if(mySeqList! =NULL) { mySeqList->element=(DataType*)malloc(sizeof(DataType)*m);//为里面的元素分配m个DataType大小的内存空间,相当于初始化了一个长度为m的数组 if(mySeqList->element) { mySeqList->MAX=m;//如果创建了元素,MAXLENGTH为最大元素的个数 mySeqList->count=0;//空表长度为0 return(mySeqList); } else free(mySeqList);//记得要手动释放空间,否则很容易产生内存泄漏 } printf("内存空间不足,请关闭一些程序,然后再试! \n");//存储分配失败,提示空间不足 returnNULL; } //功能: 判断线性表是否为空 intisEmptySeqList(MySeqListmySeqList) { return(mySeqList->count==0); } //功能: 顺序表的pos下标后面插入,插入成功返回1,失败返回0 intinsertNextSeqList(MySeqListmySeqList,intpos,DataTypex) { if(pos<0||pos>=mySeqList->count) { printf("不存在指定下标! \n"); return(0); } ++mySeqList->count; if(mySeqList->count>=mySeqList->MAX) { --mySeqList->count; printf("表产生了溢出! \n"); return(0); } for(inti=mySeqList->count-1;i! =pos+1;--i) {mySeqList->element[i]=mySeqList->element[i-1];//同样地,把pos+1插入位置及之后的元素均后移一个位置 mySeqList->element[i]=x;//插入元素x return (1); } } //功能: 顺序表的删除(根据下标删除) intdeleteSeqList(MySeqListmySeqList,intpos) { if(pos<0||pos>=mySeqList->count)//不存在下标为pos的元素,注意下标范围是从0到count-1 { printf("不存在指定下标! \n"); return(0); } for(inti=pos;i mySeqList->element[i]=mySeqList->element[i+1];//被删除元素之后的元素均前移一个位置 --mySeqList->count;//元素个数减1 return (1); } //功能: 根据元素值删除,实现顺序表的删除 intdeleteSeqListByValue(MySeqListmySeqList,intid) { intpos=locateSeqList(mySeqList,id); if(pos==-1) { printf("不存在指定下标! \n"); return(0); } deleteSeqList(mySeqList,pos); return (1); } //输出线性表的元素值 voidprintSeqList(MySeqList&mySeqList) { for(inti=0;i { cout<<"学号: "< "< "< cout<<",电话: "< "< "< cout< } cout< } //根据学生id,输出线性表的元素值 voidprintSeqListById(MySeqList&mySeqList,intid) { for(inti=0;i { if(id==mySeqList->element[i].id) { cout<<"学号: "< "< "< cout<<",电话: "< "< "< cout< break; } } } intmain2() { MySeqListmySeqList=initSeqList(20);//初始化一个长20的表 L: system("cls"); printf("\n\n\n\n\n\n\n"); printf("*************************************************\n"); printf("用顺序表存储学生信息\n\n"); printf("1、录入学生信息\n"); printf("2、查找学生信息\n"); printf("3、删除学生信息\n"); printf("4、修改学生信息\n"); printf("5、遍历学生信息\n"); printf("6、退出学生系统\n"); printf("**************************************************\n"); printf("\n\n\n\t\t");inti; cout<<"请选择一个操作(1-5): "; cin>>i; system("pause"); system("cls"); if(i==1) { mySeqList->count=1; intiRc=0; while(true&&mySeqList->count<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第一次 作业 word 版本