南京航空航天大学软件技术基础数据结构上机实验报告_第1页
南京航空航天大学软件技术基础数据结构上机实验报告_第2页
南京航空航天大学软件技术基础数据结构上机实验报告_第3页
南京航空航天大学软件技术基础数据结构上机实验报告_第4页
南京航空航天大学软件技术基础数据结构上机实验报告_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

经典word整理文档,仅参考,双击此处可删除页眉页脚。本资料属于网络整理,如有侵权,请联系删除,谢谢!南京航空航天大学计算机软件技术基础实践实验报告专年月1实验一------------------------------------4第一种算法---------------------------4第二种算法---------------------------7实验二------------------------------------9------------------------------9------------------------------11------------------------------14链栈---------------------------------15---------------------------------18实验三------------------------------------20二叉树----------------------------20实验四------------------------------------22顺序查找------------------------22二分查找------------------------24插入排序------------------------26选择排序------------------------28冒泡排序------------------------30大作业------------------------------------32---------------------------322一、实验一实验对象:顺序表。实验目的:实现两个顺序表的合并。实验要求:将共同拥有的元素只存其一。思路清晰,编程正确,并将数据元素显示出来。提高部分:实现同一表中去重的方法二、实验二实验对象:顺序表、单链表、顺序栈、链栈、队列。实验目的:实现顺序表、单链表、顺序栈、链栈、队列的顺序存储结构、链式存储结构的定义、创建、插入和删除操作。实验要求:思路清晰,编程正确,并将数据元素显示出来;注意各种数据结构的顺序存储结构和链式存储结构的异同。三、实验三实验对象:链式二叉树。实验目的:实现二叉树的链式存储结构的数据结构的定义、创建、先序、中序和后序遍历操作。实验要求:思路清晰,编程正确,并将结果序列输出;注意合理运用函数的递归调用。四、实验四实验对象:顺序表。实验目的:掌握顺序查找、二分查找、插入排序、选择排序、冒泡排序等基本的查找方法。实验要求:思路清晰,编程正确,并将查找结果显示出来。提高部分:实现自动产生数据并输出或人工输入数据的双向选择。通讯录的制作五、综合练习一、设计题目:通讯录的制作二、设计目的:运用〈数据结构〉中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。3通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C法,数组的建立运用和函数的调用等。三、设计内容:本系统应完成以下几方面的功能:调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取②显示信息(Display()):用以显示输入的数据,包括从内存中读出和从磁盘中读出③查找(Search()):以姓名作为关键字查找要找的信息④删除信息(Delete()):用以删除选定的输入信息(姓名作为关键字)⑤存盘(Save()):调用此函数将内存中的数据保存至磁盘中⑥装入(Load()):调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上注:本课题中输入的数据应包括以下几项信息:姓名(NAME)学校(SCHOOL)城市(CITY)邮编(EIP)国家(STATE)编程对很多人来说可能是一件很痛苦的事。但编程对我反而是一件很快乐事。我并不喜欢编程,但我很享受那种调出来时的感觉。每次编程时总会有很多错误,有定义出错的,有算法出错的,还有打错的。由于对链表,指针,类等等之类掌握得差,所以每当编译时,总是错误百出,好不容易编译通过了,但往往算法会存在原理性错误。幸运的是,通过参考各方面资料,以及在老师,同学的帮助下,都能实现所需要的功能,虽然不是很完美,但那是我努力的见证,那是我自己编出来的代码,每调出一个程序,心里就很开心。很多在编译、连接通过后,程序却运行不成功。这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。这也是本次程序编辑过程中碰到的最大的难题,往往运行之后得不到结果。经过总结主要为申请地址,循环出错。此时,我的解决方法是“注释”法,即将有问题的大片语句用“/*……*/”注释掉,以检验其它语句的正确性,然后用printf函数输出任意hello等字符,逐步减小注释范围,最终确定错误的具体位置。总之,编程尤其是调试是一项细致深入的工作,需要下工夫、动脑子,很考验耐力的一项工作。以上便是本人对于此次数据结构上机实践的一些心得体会。实验一:实现两个顺序表的合并。(说明:将共同拥有的元素只存其一。)类型一://线性表(数组)合并#include<stdio.h>#include<time.h>4#include<stdlib.h>voidprint(inta[],intm);/*输出函数*/voidcombin(inta[],intb[],intc[],intn,intm);//合并函数voidsort(inta[],intn);//排序函数voidget(inta[],intn);//元素产生函数intmain(){)inti,num;intj=0;inta[50]={0},b[50]={0},c[100]={0},n,m;//n为数据个数printf("firststructnumbern:\n");scanf("%d",&n);get(a,n);sort(a,n);)printf("A:\n");print(a,n);printf("secondstructnumberm:\n");scanf("%d",&m);get(b,m);sort(b,m);printf("B:\n");print(b,m);combin(a,b,c,n,m);sort(c,n+m);num=n+m;for(i=0;i<num;i++){j=i+1;for(;j<num;j++)c{组if(c[i]==c[j])c[j]=0;}}i=0;printf("C:\n");if(c[0]==0)printf("%d\t",c[0]);5for(;i<num;){if(c[i]==0)i++;elseprintf("%d\t",c[i++]);}printf("\n");return0;}voidsort(inta[100],intn){intt,i,j,k;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(a[i]>a[j]){t=a[j];a[j]=a[i];a[i]=t;}}}voidcombin(inta[100],intb[100],intc[100],intn,intm){inti=0,j=0,k=0;for(;i<m;i++)c[j++]=b[i];for(;k<n;k++)c[j++]=a[k];}voidprint(inta[100],intm){inti=0;printf("\n");for(;i<m;i++)printf("%d\t",a[i]);printf("\n");6}voidget(inta[50],intn){inti=0;srand(time(0));while(i<n)a[i++]=rand()%10;}类型二//线性表(结构体)合并b#include<stdio.h>#include<string.h>#include<stdlib.h>#defineSeqListstructlisttype#defineMaxSize1000SeqList{intdata[MaxSize];intlast;};voidmerge(SeqList*p,SeqList*q,SeqList*c);//合并函数SeqList*init_SeqList();//创建链表函数voidmain(){SeqList*p;p=init_SeqList();inti,j,n;i=0;j=0;printf("PleaseinputthelengthofSeqListp:\nn=");scanf("%d",&n);printf("intputthedate:\n");while(i<n){scanf("%d",&p->data[i]);i++;p->last++;}7SeqList*q;q=init_SeqList();printf("PleaseinputthelengthofSeqListq:\nn=");scanf("%d",&n);printf("intputthedate:\n");while(j<n){scanf("%d",&q->data[j]);j++;q->last++;}SeqList*c;c=init_SeqList();merge(p,q,c);}voidmerge(SeqList*p,SeqList*q,SeqList*c)//合并函数{inti,j,k,a;i=0;j=0;k=0;while(i<=p->last)//循环赋值到c{c->data[k]=p->data[i];k++;i++;}while(j<=q->last){i=0;while(i<=p->last&&p->data[i]!=q->data[j])//循环赋值到ci++;if(i>p->last){c->data[k]=q->data[j];k++;}j++;}i=0;for(;i<k;i++)//c中去重{for(j=i+1;j<k;j++){8if(c->data[i]==c->data[j]){for(;j<k;j++){c->data[j]=c->data[j+1];}k--;}}}printf("\nthemergeSeqlistc:\n");for(a=0;a<k;a++)printf("%d",c->data[a]);}SeqList*init_SeqList()//创建链表函数{SeqList*p;p=(SeqList*)malloc(sizeof(SeqList));p->last=-1;returnp;}实验二:顺序表、单链表、顺序栈、链栈、队列的顺序存储结构、链式存储结构的定义、创建、插入和删除操作,将数据元素显示出来。//线性表#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMaxSize1000#defineSeqListstructlisttypeSeqList//结构体定义{intdata[MaxSize];intlast;};voidprint(SeqList*p);//输出函数SeqList*init_SeqList();//线性表的初始化intInsert_SeqList(SeqList*L,inti,intx);//在第i个位置插入xintDelete_SeqList(SeqList*L,inti);//删除第i个位置的元素main(){9SeqList*p;inti,x;i=0;p=init_SeqList();printf("PleaseinputSeqListp(when-1stop!):\n");scanf("%d",&x);while(x!=(-1)){p->data[i]=x;i++;p->last++;scanf("%d",&x);}printf("\n输入插入位置i=");scanf("%d",&i);printf("输入待插数据x=");scanf("%d",&x);printf("\n");输入待插位置Insert_SeqList(p,i,x);printf("待删除的位置i=");scanf("%d",&i);printf("\n");Delete_SeqList(p,i);}voidprint(SeqList*p)//输出函数{inti;for(i=0;i<=p->last;i++)printf("%d\t",p->data[i]);printf("\n");}SeqList*init_SeqList()//线性表的初始化{SeqList*L;L=(SeqList*)malloc(sizeof(SeqList));L->last=-1;returnL;}intInsert_SeqList(SeqList*L,inti,intx)//在第i个位置插入x{intj;i--;10if(L->last==MaxSize-1)//表满{printf("Seqlistfulled!\n");return-1;}if(i<0||i>L->last+1){printf("Error'i'!\n");return0;}if(i==L->last+1)L->data[i]=x;else{for(j=L->last;j>=i;j--)L->data[j+1]=L->data[j];L->data[i]=x;}L->last++;printf("\n插入后线性表为:\n");print(L);return1;}intDelete_SeqList(SeqList*L,inti)//删除第i个位置的元素{intj;i--;if(i<0||i>L->last){printf("error'i'\n");return0;}for(j=i;j<L->last;j++)L->data[j]=L->data[j+1];L->last--;printf("\n删除后线性表为\n");print(L);return1;}/*单链表的定义、创建、插入和删除操作,将数据元素显示出来。*/#include<stdio.h>#include<malloc.h>11#defineslnodestructnodeslnode//单链表的定义{intdata;slnode*next;};slnode*create();//单链表的尾插法创建voidinsert(slnode*h,intx);//单链表的插入(插入尾部)intdelete_y(slnode*h,inty);//单链表的节点删除voidprint(slnode*L);//显示单链表所有元素main(){slnode*h;intx,y;h=create();printf("链表初始数据为:\n");print(h);printf("请输入要插入的数据:\n");scanf("%d",&x);insert(h,x);printf("插入后链表数据为:\n");print(h);)printf("请输入要删除的数据:\n");scanf("%d",&y);delete_y(h,y);删除函数输出链表数据})slnode*create()//单链表的尾插法创建{slnode*p,*s,*h;inti=0,a;h=(slnode*)malloc(sizeof(slnode));p=h;h->next=NULL;printf("请输入数据,以-1为结尾:\n");scanf("%d",&a);while(a!=-1){s=(slnode*)malloc(sizeof(slnode));s->data=a;if(h->next==NULL)h->next=s;elsep->next=s;p=s;12scanf("%d",&a);}p->next=NULL;return(h);}voidinsert(slnode*h,intx)//单链表的插入(插入尾部){slnode*p,*p1;p=(slnode*)malloc(sizeof(slnode));p->data=x;p->next=NULL;p1=h->next;while(p1->next!=NULL)p1=p1->next;p1->next=p;p->next=NULL;}intdelete_y(slnode*h,inty)//单链表的节点删除{slnode*p1,*p2;p1=h->next;p2=h;while(p1->data!=y&&p1->next!=NULL){p2=p1;p1=p1->next;}if(p1->data!=y){printf("未找到\t");return0;}else{p2->next=p1->next;free(p1);printf("删除后链表数据为:\n");print(h);}}voidprint(slnode*L){slnode*p;//显示单链表所有元素for(p=L->next;p!=NULL;p=p->next)printf("%d",p->data);printf("\n");13}//顺序栈的定义、创建、入栈和出栈#include<stdio.h>#include<malloc.h>#definemaxsize1024#definestackstructstackstack//顺序栈的定义{intdate[maxsize];inttop;};单个元素入栈函数)voidpush_x(stack*L,intx);stack*create();//创建intpop_y(stack*L);//栈顶元素出栈//入栈voiddisplay(stack*L);//显示顺序栈的数据元素main(){stack*h;h=create();printf("出栈顺序:\n");display(h);}voidpush_x(stack*L,intx)//单个元素入栈{if(L->top==maxsize-1)printf("栈满\n");else{L->top++;L->date[L->top]=x;}}stack*create()//创建{stack*L;inta;L=(stack*)malloc(sizeof(stack));L->top=-1;printf("请输入入栈元素---以-1结束.\n");scanf("%d",&a);while(a!=-1){push_x(L,a);scanf("%d",&a);14}printf("\n");return(L);}intpop_y(stack*L)//顺序栈出栈{inty;if(L->top==-1)printf("栈空\n");elsey=L->date[L->top];return(y);}voiddisplay(stack*L)//显示顺序栈的数据元素{inty;while(L->top!=-1){y=pop_y(L);printf("%d",y);L->top--;}printf("\n");}//链栈的入栈,出栈,以及创建#include<stdio.h>#include<malloc.h>#definelinkstackstructlinkstacklinkstack{intdate;linkstack*next;};linkstack*push_x(linkstack*top,intx);//x入栈linkstack*create();//链栈的创建voiddisplay(linkstack*top);//出栈main(){linkstack*h;h=create();printf("出栈顺序如下:\n");display(h);15printf("\n");}linkstack*push_x(linkstack*top,intx)//x入栈{linkstack*p;p=(linkstack*)malloc(sizeof(linkstack));p->date=x;p->next=top;top=p;return(top);单个元素入栈函数)}linkstack*create()//链栈的创建{linkstack*top;inta;top=(linkstack*)malloc(sizeof(linkstack));top=NULL;printf("请输入链栈入栈元素---以-1结束.\n");scanf("%d",&a);while(a!=-1){top=push_x(top,a);scanf("%d",&a);}return(top);}voiddisplay(linkstack*top){inty;linkstack*p;if(top==NULL)printf("该链栈为空\n");while(top!=NULL){y=top->date;printf("%d",y);p=top;top=top->next;free(p);}}/*顺序队列*/#include<stdio.h>#include<malloc.h>16#definemaxsize1024#definequeuestructqueuequeue//定义{intdate[maxsize];intfront,rear;intnum;};voidin_queue(queue*L,intx);//入队操作queue*create();//创建intout_queue(queue*L);//出队操作voiddisplay(queue*L);//显示顺序队列的数据元素voiddisplay(queue*L)//显示顺序队列的数据元素{while(L->num!=0){printf("%d",out_queue(L));}单个元素入栈函}数)main(){queue*L;L=create();printf("该顺序队列出队顺序如下:\n");display(L);printf("\n");}voidin_queue(queue*L,intx)//入队操作{if(L->num==maxsize)printf("队满\n");else{L->rear=(L->rear+1)%maxsize;L->date[L->rear]=x;L->num++;}}queue*create()//创建{queue*L;inta;L=(queue*)malloc(sizeof(queue));L->front=L->rear=-1;17L->num=0;printf("请输入队列元素---以-1为结尾:\n");scanf("%d",&a);while(a!=-1){in_queue(L,a);scanf("%d",&a);}return(L);}intout_queue(queue*L)//出队操作{inty;if(L->num==0){printf("队空\n");单个元素入栈函return(0);数)}else{L->front=(L->front+1)%maxsize;y=L->date[L->front];L->num--;return(y);}}//链队#include<stdio.h>#include<malloc.h>#defineqnodestructqnode#definelinkqueuestructlinkqueueqnode//定义{intdate;qnode*next;};linkqueue//将链队头尾指针封装在一起{qnode*front,*rear;};voidin_qnode(linkqueue*q,intx);//入队操作linkqueue*create();//创建intout_qnode(linkqueue*q);//出队voiddisplay(linkqueue*q);//显示链队的数据元素18main(){linkqueue*L;L=create();printf("该链队出队顺序如下:\n");display(L);printf("\n");}voidin_qnode(linkqueue*q,intx)//入队操作{qnode*p;p=(qnode*)malloc(sizeof(qnode));p->date=x;p->next=NULL;q->rear->next=p;q->rear=p;}linkqueue*create()//创建{qnode*L;inta;linkqueue*q;L=(qnode*)malloc(sizeof(qnode));q=(linkqueue*)malloc(sizeof(linkqueue));L->next=NULL;q->rear=q->front=L;printf("请输入链队入队元素,以-1为结尾:\n");scanf("%d",&a);while(a!=-1){in_qnode(q,a);scanf("%d",&a);}return(q);}intout_qnode(linkqueue*q)//出队{inty;qnode*p;if(q->rear==q->front){printf("队空\n");return(0);19}p=q->front->next;y=p->date;q->front->next=p->next;//释放pfree(p);if(q->front->next==NULL)q->rear=q->front;return(y);}voiddisplay(linkqueue*q)//显示链队的数据元素{while(q->front!=q->rear)printf("%d",out_qnode(q));}实验三:二叉树的链式存储结构的数据结构定义、创建、先序/中序/后序遍历,并将结果序列输出。//二叉树//测试输入ABD0G000CE00F00输出ABDGCEFDGBAECFGDBEFCA#include<stdio.h>#include<malloc.h>typedefstructbitree{chara;structbitree*lchild,*rchild;}Bitree;Bitree*create(Bitree*bt);//创建voidpreorder(Bitree*bt);//前序遍历voidinorder(Bitree*bt);//中序遍历voidpostorder(Bitree*bt);//后序遍历main(){inta;Bitree*bt;bt=(Bitree*)malloc(sizeof(Bitree));printf("先序输入数据,0表示停止\n");\bt=create(bt);printf("\n\n先序输出数据\n");preorder(bt);printf("\n\n中序输出数据\n");inorder(bt);20printf("\n\n后序输出数据\n");postorder(bt);}Bitree*create(Bitree*bt)//创建{charx;sscanf("\n%c",&x);if(x=='0')bt=NULL;)else{bt=(Bitree*)malloc(sizeof(Bitree));bt->a=x;bt->lchild=create(bt->lchild);bt->rchild=create(bt->rchild);)}return(bt);}voidpreorder(Bitree*bt)//前序遍历{if(bt==NULL))return;printf("%c",bt->a);preorder(bt->lchild);preorder(bt->rchild);})voidinorder(Bitree*bt)//中序遍历{if(bt==NULL)return;inorder(bt->lchild);printf("%c",bt->a);inorder(bt->rchild);}voidpostorder(Bitree*bt)//后序遍历{if(bt==NULL)return;postorder(bt->lchild);postorder(bt->rchild);printf("%c",bt->a);}实验四:查找:顺序查找、二分查找排序:插入排序、选择排序、冒泡排序21//顺序查找#include<stdio.h>#include<malloc.h>typedefstructNODE{inta[1024];}node;voidchoose(node*p,intm,intn);//选择自动或者手动输入voidget(node*p,intn);//随机产生函数voidprint(node*p,intn);//输出函数intsearch(node*p,intn,intdata);//查找函数main(){=1m=2)node*p;p=(node*)malloc(sizeof(node));intn;//数据总个数intm,data,temp;)printf("输入输入的元素总个数n:");scanf("%d",&n);printf("\n1自动输入数据:\n2手动输入数据:\n");scanf("%d",&m);choose(p,m,n);printf("\n输入待查数据:data=");scanf("%d",&data);)temp=search(p,n,data);if(!temp)printf("\n没有这个数据\n");}voidchoose(node*p,intm,intn){switch(m){case1:{get(p,n);printf("\n表中数据为:\n");print(p,n);}break;case2:{inti;22intx;printf("输入数据\n");for(i=0;i<n;i++){scanf("%d",&x);p->a[i]=x;}}}}voidget(node*p,intn){inti;srand(time(0));for(i=0;i<n;i++)p->a[i]=rand()%100;}voidprint(node*p,intn){inti;for(i=0;i<n;i++)printf("%d\t",p->a[i]);printf("\n\n");}intsearch(node*p,intn,intdata){inti,temp;temp=0;for(i=0;i<n;i++){if(p->a[i]==data){printf("\n查找成功---数据为:%d",p->a[i]);temp=1;}}returntemp;}//二分查找#include<stdio.h>#include<malloc.h>typedefstructNODE23{inta[1024];}node;voidchoose(node*p,intm,intn);//选择自动或者手动输入voidget(node*p,intn);//随机产生函数voidprint(node*p,intn);//输出函数intsearch(node*p,intn,intdata);//查找函数main(){node*p;)p=(node*)malloc(sizeof(node));intn;//数据总个数intm,data,temp;printf("输入输入的元素总个数n:");scanf("%d",&n);printf("\n1自动输入数据:\n2手动输入数据:\n");)scanf("%d",&m);get(p,n);choose(p,m,n);printf("\n输入待查数据:data=");scanf("%d",&data);temp=search(p,n,data);)if(!temp)printf("\n没有这个数据\n");}voidchoose(node*p,intm,intn){switch(m){case1:{get(p,n);printf("\n表中数据为:\n");print(p,n);}break;case2:{inti;intx;printf("输入数据\n");for(i=0;i<n;i++)24{scanf("%d",&x);p->a[i]=x;}}}}voidget(node*p,intn){inti;srand(time(0));for(i=0;i<n;i++)p->a[i]=rand()%100;intj,temp;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(p->a[i]>p->a[j]){temp=p->a[i];p->a[i]=p->a[j];p->a[j]=temp;}}voidprint(node*p,intn){inti;for(i=0;i<n;i++)printf("%d\t",p->a[i]);printf("\n\n");}intsearch(node*p,intn,intdata){inti,high,low,mid;inttemp=0;high=n-1;low=0;while(low<=high){mid=(high+low)/2;if(data<p->a[mid])high=mid-1;elseif(data>p->a[mid])low=mid+1;25else{printf("\n查找成功---数据为:%d",p->a[mid]);temp=1;break;}}returntemp;}//插入排序#include<stdio.h>#include<malloc.h>typedefstructNODE{inta[1024];}node;)voidchoose(node*p,intm,intn);//选择自动或者手动输入voidget(node*p,intn);//随机产生函数voidprint(node*p,intn);//输出函数voidinsertsort(node*p,intn);)main(){node*p;p=(node*)malloc(sizeof(node));intn;//数据总个数intm;)printf("输入输入的元素总个数n:");scanf("%d",&n);printf("\n1自动输入数据:\n2手动输入数据:\n");scanf("%d",&m);choose(p,m,n);insertsort(p,n);printf("排序后数据为:\n");print(p,n);}voidchoose(node*p,intm,intn){switch(m){case1:{26get(p,n);break;}case2:{inti;intx;printf("输入数据\n");for(i=1;i<=n;i++){scanf("%d",&x);p->a[i]=x;}}}}voidget(node*p,intn){inti;srand(time(0));for(i=1;i<=n;i++)p->a[i]=rand()%100;printf("\n原数据顺序为\n");print(p,n);}voidprint(node*p,intn){inti;for(i=1;i<=n;i++)printf("%d\t",p->a[i]);printf("\n\n");}voidinsertsort(node*p,intn){inti,j;for(i=2;i<=n;i++){p->a[0]=p->a[i];j=i-1;while(p->a[0]<p->a[j]){p->a[j+1]=p->a[j];27j--;p->a[j+1]=p->a[0];}}}//选择排序#include<stdio.h>#include<malloc.h>typedefstructNODE{inta[1024];}node;voidchoose(node*p,intm,intn);//选择自动或者手动输入voidget(node*p,intn);//随机产生函数voidprint(node*p,intn);//输出函数voidselectsort(node*p,intn);)main(){node*p;p=(node*)malloc(sizeof(node));intn;//数据总个数)intm;printf("输入输入的元素总个数n:");scanf("%d",&n);printf("\n1自动输入数据:\n2手动输入数据:\n");scanf("%d",&m);choose(p,m,n);)selectsort(p,n);printf("排序后数据为:\n");print(p,n);}voidchoose(node*p,intm,intn){switch(m){case1:{get(p,n);}break;case2:{28inti;intx;printf("输入数据\n");for(i=1;i<=n;i++){scanf("%d",&x);p->a[i]=x;}}}}voidget(node*p,intn){inti;srand(time(0));for(i=1;i<=n;i++)p->a[i]=rand()%100;printf("\n原数据顺序为\n");print(p,n);}voidprint(node*p,intn){inti;for(i=1;i<=n;i++)printf("%d\t",p->a[i]);printf("\n\n");}voidselectsort(node*p,intn){inti,j,k;for(i=1;i<=n;i++){k=i;for(j=i+1;j<=n;j++)if(p->a[k]>p->a[j])k=j;if(k!=i){p->a[0]=p->a[i];p->a[i]=p->a[k];p->a[k]=p->a[0];}29}}//冒泡排序#include<stdio.h>#include<malloc.h>typedefstructNODE{inta[1024];}node;voidchoose(node*p,intm,intn);//选择自动或者手动输入voidget(node*p,intn);//随机产生函数voidprint(node*p,intn);//输出函数voidbubblesort(node*p,intn);)main(){node*p;p=(node*)malloc(sizeof(node));intn;//数据总个数)intm;printf("输入输入的元素总个数n:");scanf("%d",&n);printf("\n1自动输入数据:\n2手动输入数据:\n");scanf("%d",&m);choose(p,m,n);)bubblesort(p,n);printf("排序后数据为:\n");print(p,n);}voidchoose(node*p,intm,intn){switch(m){case1:{get(p,n);}break;case2:{inti;intx;printf("输入数据\n");30for(i=1;i<=n;i++){scanf("%d",&x);p->a[i]=x;}}}}voidget(node*p,intn){inti;srand(time(0));for(i=1;i<=n;i++)p->a[i]=rand()%100;printf("\n原数据顺序为\n");print(p,n);}voidprint(node*p,intn){inti;for(i=1;i<=n;i++)printf("%d\t",p->a[i]);printf("\n\n");}voidbubblesort(node*p,intn){inti,j;for(i=1;i<=n;i++)for(j=i+1;j<=n;j++)if(p->a[i]>p->a[j]){p->a[0]=p->a[i];p->a[i]=p->a[j];p->a[j]=p->a[0];}}31通讯录Choose=1choose=4choose=5choose=6choose=0)))))找不到,要加入数据清屏回到主主菜单//通讯录0311102226#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>/*注:本课题中输入的数据应包括以下几项信息:32姓名(NAME)学校(SCHOOL)城市(CITY)邮编(EIP)国家(STATE)*/typedefstructstudent{charNAME[30],SCHOOL[100],CITY[100],EIP[30],STATE[200];structstudent*next;}Student;voidmenu(Student*h);voidchoice(Student*h,intn);voidEnter(Student*h);voidDisplay(Student*h);voidSearch(Student*h);voidDelete(Student*h);voidSave(Student*h);voidLoad();voidinsert_data(Student*h);main(){Student*stu;stu=(Student*)malloc(sizeof(Student));if(stu==NULL){printf("\n内存申请出错!\n");exit(1);}stu->next=NULL;while(1){menu(stu);system("cls");}}voidmenu(Student*h){charchoose;printf("**************************\n");printf("***通讯录管理系统***\n");printf("**************************\n");printf("\n输入相应数字进行选择\n");printf("\n1输入数据(从键盘输入)\n2显示信息\n3查找\n4删除信息\n5存盘\n6装入(.txt文件中的数据输入到屏幕或者速到数据表中)\n0退出\n\n");scanf("%d",&choose);choice(h,choose);}voidchoice(Student*h,intn)33{switch(n){case0:exit(0);case1:Enter(h);break;case2:Display(h);break;case3:Search(h);break;case4:Delete(h);break;case5:Save(h);break;case6:Load(h);break;}}voidEnter(Student*h){charc='y';Student*p,*s;p=h->next;while(c!='n'&&c!='N'){insert_data(h);getchar();printf("\n是否继续输入数据\nn:停止输入,任意键继续输入\n");scanf("%c",&c);}printf("\n");system("pause");}voidDisplay(Student*h){Student*s;s=h;if(h->next==NULL){charch;getchar();printf("\n表中无数据\n");printf("\n是否输入学生的信息?\nY-----加入\n其他任意键继续\n");scanf("%c",&ch);if((ch=='y')||(ch=='Y'))Enter(h);printf("\n加入成功\n");printf("\n");}34else{printf("\n表中数据为:\n");printf("NAMESCHOOLCITYEIPSTATE\n");while(s->next!=NULL){s=s->next;printf("%s\t%s\t%s\t%s\t%s\n",s->NAME,s->SCHOOL,s->CITY,s->EIP,s->STATE);}}printf("\n");system("pause");}voidSearch(Student*h){charName[30];inttemp=0;Student*s;s=h;if(s->next==NULL){charch;getchar();printf("\n表中无数据\n");printf("\n是否输入学生的信息?\nY-----加入\n其他任意键继续\n");scanf("%c",&ch);if((ch=='y')||(ch=='Y'))Enter(h);printf("\n");}else{printf("\n请输入要查询学生的名字\n");scanf("%s",Name);while(s->next!=NULL){s=s->next;if(!strcmp(s->NAME,Name)){printf("\n查找成功---学生信息为\n");printf("NAMESCHOOLCITYEIPSTATE\n");printf("%s\t%s\t%s\t%s\t%s\n",s->NAME,s->SCHOOL,s->CITY,s->EIP,s->STATE);35temp=1;}}if(temp==0){printf("\n没有这个学生的信息\n");charch='n';getchar();printf("\n是否加入这个学生的信息?\nY-----加入\n其他任意键继续\n");scanf("%c",&ch);if(ch=='y')insert_data(h);printf("\n");}}system("pause");}voidDelete(Student*h)//实现出去表中所有相同数据删除{charName[30];inttemp;temp=0;Student*s,*q,*r;s=q=h;if(s->next==NULL){charch;getchar();printf("\n表中无数据\n");printf("\n是否输入学生的信息?\nY-----加入\n其他任意键继续\n");scanf("%c",&ch);if((ch=='y')||(ch=='Y'))Enter(h);printf("\n");}else{printf("\n请输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论