数据结构上机程序_第1页
数据结构上机程序_第2页
数据结构上机程序_第3页
数据结构上机程序_第4页
数据结构上机程序_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、/*作业要求:试编写一算法,实现两个顺序表的合并。(说明:将共同拥有的元素只存其一。)缺点:1.因为是第一次上机,没有顾及到良好的人际界面和程序流程。2.并且没有将VC可输出中文的良好功能利用起来3.试验了一下,发现在一个顺序表内不能输入相同的元素心得:重新熟悉了一下C语言,为以后的编程提供了基础*/#include<stdio.h>#include<stdlib.h>#define SeqList struct listtype#define MaxSize 1000SeqList int dataMaxSize; int last;void fuzhi(SeqLis

2、t *L) /用键盘连续输入顺序表的值 int a; printf("input number,'0' will exitn"); scanf("%d",&a); while(a!=0)&&(L->last<999) L->last+; if(a!=0) L->dataL->last = a; scanf("%d",&a); main() int i,j; SeqList *a,*b,*c; a = malloc(sizeof(SeqList); a->

3、;last = -1; b = malloc(sizeof(SeqList); b->last = -1; c = malloc(sizeof(SeqList); c->last = -1; /对三个顺序表进行初始化 fuzhi(a);printf("OKn");/试验了一下,发现在一个顺序表内不能输入相同的元素 fuzhi(b);printf("OKn");/在两个顺序表之间却可以 for(i=0;i<=a->last;i+) c->datai=a->datai; c->last = a->last;/将

4、a顺序表的值先赋给c顺序表 for(i=0;i<=b->last;i+) for(j=0;j<=c->last;j+) if(b->datai=c->dataj) break;/排除b顺序表与c顺序表中相同的元素 if(j>c->last) c->last+;c->datac->last=b->datai; /若查找发现没有相同,则添加入c顺序表 for(i=0;i<=c->last;i+) printf("%dt",c->datai); /输出c顺序表中的各个元素 printf(&q

5、uot;n");/*作业内容:线性表的定义、创建、插入和删除操作,并将数据元素显示出来缺点:本程序只能够用一遍,也就是说建立后就没法在此建立了优点:照顾到了程序结构的合理排布,并加入了良好的人机界面心得:此程序很简单,但是还是用上了结构体,是为了熟悉他的操作和应用*/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include"iostream.h"#include"ctype.h"#include"fstream.h"#incl

6、ude"iomanip.h"#include <windows.h>/*结构体*/#define Seqlist struct listtypeSeqlist int data1000;/存储元素值 int last;/元素个数;/*函数声明*/chuangjian(Seqlist *);insert(Seqlist *);delet(Seqlist *);display(Seqlist *);search(Seqlist *);/*主函数*/main() Seqlist *L;char a; L=malloc(sizeof(Seqlist); L->la

7、st=-1;/初始化 while(1) printf("chuangjian = 1n"); printf("insert = 2n"); printf("delete = 3n"); printf("display = 4n"); printf("search = 5n"); scanf("%d",&a);/人机界面 switch(a) case 1:chuangjian(L);break; case 2:insert(L);break; case 3:delet(

8、L);break; case 4:display(L);break; case 5:search(L);break; default: printf("Failn"); /调用各个函数 system("pause");/暂停 system("cls");/清屏 /*创建函数*/chuangjian(Seqlist *L) int a; if(L->last!=-1) printf("yijianlin");/判断是否已经有元素 else printf("input number,'-1

9、9; exitn"); scanf("%d",&a); while(a!=-1&&L->last<=999) L->last+; L->dataL->last=a;printf("OKn");printf("input number,'-1' exitn"); scanf("%d",&a); /用键盘输入各个元素的值,当为-1时结束 printf("chuangjian chenggongn");/*后插函数

10、*/insert(Seqlist *L) int a; if(L->last>999) printf("biaoman");/判断线性表是否表满 else printf("input number which you want to insertn"); scanf("%d",&a); L->last+; L->dataL->last=a; printf("charu chenggongn"); /*遍寻函数*/search(Seqlist *L) int a,i; print

11、f("input number which you want to searchn"); scanf("%d",&a);/输入待寻找的元素 for(i=0;i<=L->last;i+) if(a=L->datai) break; /依次对比 if(i>L->last) printf("meiyoun");/没有找到 else printf("OKnzai di %d ge",(i+1);/*删除函数*/delet(Seqlist *L)int a,i;printf("

12、input number which you want to deleten");scanf("%d",&a);/输入待删除的元素 for(i=0;i<=L->last;i+) if(a=L->datai) break;/依次对比 if(i>L->last) printf("meiyoun");/没有找到 elseprintf("shanchu chenggongn");for(;i<L->last;i+)L->datai=L->datai+1;L->las

13、t-;/删除该元素,并将线性表长度减一/*全显函数*/display(Seqlist *L)int i;if(L->last=0) printf("kongbiaon");elseprintf("Now,yixia ji wei neirongn");for(i=0;i<=L->last;i+)printf("%dt",L->datai);/依次输入元素值printf("n");/*作业内容:链表的定义、创建、插入和删除操作,将数据元素显示出来。心得:链表相对于线性表来说,不用担心空间大小的

14、问题,更方便些*/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include <windows.h>/*结构体声明*/#define SLNODE struct nodeSLNODE int data; SLNODE *next;/*函数声明*/chuangjian(SLNODE *);insert(SLNODE *);delet(SLNODE *);display(SLNODE *);search(SLNODE *);/*主函数*/main() SLNODE *L;char a; L

15、=malloc(sizeof(SLNODE);L->next=NULL; while(1) printf("chuangjian = 1n"); printf("insert = 2n"); printf("delete = 3n"); printf("display = 4n"); printf("search = 5n"); scanf("%d",&a);/人机界面 switch(a) case 1:chuangjian(L);break; case 2:i

16、nsert(L);break; case 3:delet(L);break; case 4:display(L);break; case 5:search(L);break; default: printf("Failn"); system("pause");/暂停 system("cls");/清屏 /*创建函数*/chuangjian(SLNODE *L)int a;SLNODE *p,*q; if(L->next!=NULL) printf("yijianlin");/判断是否建立 else print

17、f("input number,'-1' exitn"); p=L; scanf("%d",&a); while(a!=-1) q=malloc(sizeof(SLNODE);q->next=NULL; p->next = q; q->data =a ; p=q; printf("OKn"); printf("input number,'-1' exitn"); scanf("%d",&a); /输入各元素值,以-1结束 prin

18、tf("chuangjian chenggongn");/*前插函数*/insert(SLNODE *L)int a;SLNODE *p;p=malloc(sizeof(SLNODE);p->next=NULL;printf("input number which you want to insertn");scanf("%d",&a);p->next = L->next;L->next=p;p->data=a;printf("charu chenggongn");/*遍寻函数

19、*/search(SLNODE *L)int a,i;SLNODE *p; printf("input number which you want to searchn");scanf("%d",&a);for(p=L->next,i=0;p!=NULL;p=p->next,i+)if(a=p->data)break;if(p=NULL) printf("meiyoun");else printf("OKnzai di %d ge",(i+1);/*删除函数*/delet(SLNODE *

20、L)int a;SLNODE *p,*q;printf("input number which you want to deleten");scanf("%d",&a); for(p=L;p->next!=NULL;p=q)q=p->next; if(a=q->data) break; if(p->next=NULL) printf("meiyoun"); elsep->next = q->next;free(q);printf("shanchu chenggongn")

21、;/*全显函数*/display(SLNODE *L)SLNODE *p;if(L->next=NULL) printf("kongbiaon");elseprintf("Now,yixia ji wei neirongn");for(p=L->next;p!=NULL;p=p->next)printf("%dt",p->data);printf("n");/*作业内容:顺序栈的定义、创建、插入和删除操作,将数据元素显示出来。缺点:1.此程序是写好后为了满足另外的要求而强行修改而成的,所以没

22、有了程序结构优化的特点。以后写程序前,打好腹稿很重要的啊切记切记!2.直接将空间定死了,会为以后的修改带来很多不利*/#include<stdio.h>#include<stdlib.h>#include <windows.h>#define SqStack struct listtupe/*结构体*/SqStack int data1000; int top;/栈顶;/*函数声明*/chuangjian(SqStack *);ruzhan(SqStack *);chuzhan(SqStack *);display(SqStack *);dis(SqStac

23、k *L);/*主函数*/main() SqStack *L;char a; L=malloc(sizeof(SqStack);L->top=-1; while(1) printf("chuangjian = 1n"); printf("ruzhan = 2n"); printf("chuzhan = 3n"); printf("display the top = 4n"); printf("display all = 5n"); scanf("%d",&a);

24、/人机界面 switch(a) case 1:chuangjian(L);break; case 2:ruzhan(L);break; case 3:chuzhan(L);break; case 4:display(L);break; case 5:dis(L);break; default: printf("Failn"); /功能选择 system("pause");/暂停 system("cls");/清屏 /*创建函数*/chuangjian(SqStack *L) int a; if(L->top!=-1) print

25、f("yijianlin");/判断是否已建立 else printf("input number,'-1' exitn"); scanf("%d",&a); while(a!=-1&&L->top<=999) L->top+; L->dataL->top=a;printf("OKn");printf("input number,'-1' exitn"); scanf("%d",&a

26、); /输入元素值,以-1结束 printf("chuangjian chenggongn");/*入栈函数*/ruzhan(SqStack *L) int a; if(L->top>999) printf("zhanman"); else printf("input number which you want to insertn"); scanf("%d",&a); L->top+; L->dataL->top=a; printf("ruzhan chenggon

27、gn"); /*出栈函数*/chuzhan(SqStack *L)if(L->top=-1) printf("zhankongn");elseprintf("cishu wei:n");printf("%dn",L->dataL->top);L->top-;/*取值函数*/display(SqStack *L)if(L->top=-1) printf("zhankongn");elseprintf("cishu wei:n");printf("%

28、d",L->dataL->top);/*展示全部*/dis(SqStack *L)int p;p = L->top; for(;L->top>=0;L->top-) display(L); printf("n"); L->top = p;/*作业内容:链栈的定义、创建、插入和删除操作,将数据元素显示出来。*/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include <windows.h>/*结构体声明*/#def

29、ine LZ struct nodeLZ int data;/元素值 LZ *next;/*函数声明*/chuangjian(LZ *);insert(LZ *);delet(LZ *);display(LZ *);search(LZ *);dis(LZ * L);/*主函数*/main() LZ *L;char a; L=malloc(sizeof(LZ);L->next=NULL; while(1) printf("chuangjian = 1n"); printf("ruzhan = 2n"); printf("chuzhan =

30、3n"); printf("display the top number = 4n"); printf("display all = 5n"); scanf("%d",&a);/人机界面 switch(a) case 1:chuangjian(L);break; case 2:insert(L);break; case 3:delet(L);break; case 4:display(L);break; case 5:dis(L);break; default: printf("Failn");

31、/功能选择 system("pause");/暂停 system("cls");/清屏 /*创建函数*/chuangjian(LZ *L)int a;LZ *p,*q; if(L->next!=NULL) printf("yijianlin");/判断是否已建立 else printf("input number,'-1' exitn"); p=L; scanf("%d",&a); while(a!=-1) q=malloc(sizeof(LZ);q->nex

32、t=NULL; p->next = q; q->data =a ; p=q; printf("OKn"); printf("input number,'-1' exitn"); scanf("%d",&a); /输入元素值,以-1结束 printf("chuangjian chenggongn");/*入栈函数*/insert(LZ *L)int a;LZ *p,*q;for(q=L;q->next!=NULL;q=q->next); p=malloc(sizeof(

33、LZ);p->next=NULL;printf("input number which you want to insertn");scanf("%d",&a);q->next = p;p->data = a;printf("ruzhan chenggongn");/*出栈函数*/delet(LZ *L)LZ *p,*q;if(L->next=NULL) printf("zhan kongn");/判断是否栈空elsefor(q=L;q->next!=NULL;q=q->

34、next);for(p=L;p->next!=q;p=p->next);p->next = NULL;printf("cishu wei :n");printf("%dn",q->data);printf("chuzhan chenggong");/*显示函数*/display(LZ *L)LZ *q;if(L->next=NULL) printf("zhan kongn");/判断是否栈空elsefor(q=L;q->next!=NULL;q=q->next);print

35、f("cishu wei :n");printf("%dn",q->data);/*全显函数*/dis(LZ * L)LZ *p,*q;if(L->next=NULL) printf("zhan kongn");/判断是否栈空elsefor(q=L;q->next!=NULL;q=q->next);while(q != L)for(p=L;p->next!=q;p=p->next);printf("cishu wei :n"); printf("%dn",q-

36、>data);for(q=L;q!=p;q=q->next);/*作业要求:二叉树的链式存储结构的数据结构定义、创建、先序/中序/后序遍历,并将结果序列输出优点:此程序按照使用者的输入方式,先建立了一个二叉树,然后可先序、中序、后序遍历,并用摧毁函数增加了此程序的重复使用性。缺点:在形成二叉树时不够直观,往往需要用户先在纸上画出目标二叉树,然后才能有序的输入。但一直没想到怎么样去改善这种,望以后的有时间时可再去钻研。*/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include <

37、;windows.h>/*结构体声明*/typedef struct BiTreeint data;/此节点的元素值struct BiTree *lchild,*rchild;/左子节点和右子节点BiTree;/*函数声明*/void chuangjian(BiTree *L);void zhongxu(BiTree *L);void houxu(BiTree *L);void qianxu(BiTree *L);void cuihui(BiTree *L);BiTree * qiantao(BiTree *bt);void zhongxu_(BiTree *bt);void houxu

38、_(BiTree *bt);void qianxu_(BiTree *bt);/*主函数*/main()BiTree *L;char a;L= (BiTree*)malloc(sizeof(BiTree);L->data = 0;L->lchild = NULL;L->rchild = NULL;/初始化while(1)printf("请输入所选择的功能:n");printf("n");printf(" 创建二叉树 = 1n");printf(" 前序遍历二叉树 = 2n");printf(&qu

39、ot; 中序遍历二叉树 = 3n");printf(" 后序遍历二叉树 = 4n");printf("摧毁已建立的二叉树 = 5n");printf("n");printf("选择的功能键为:");scanf("%d",&a);printf("n");switch(a)case 1:chuangjian(L);break;case 2:qianxu(L);break;case 3:zhongxu(L);break;case 4:houxu(L);break;

40、case 5:cuihui(L);break;default:printf("输入错误,请重新输入n");printf("n");printf("n");/功能选择system("pause");system("cls");/*创建函数*/void chuangjian(BiTree *L)int data;if(L->data != 0)printf("已创建,请先摧毁后再创建n");printf("n");printf("n"

41、);/判断是否已建立elseprintf("此为根节点n");printf("注:请输入此节点的值,若为0,此节点不存在!n");printf("此节点值为:");scanf("%d",&data);L->data = data;printf("n");if(data != 0)printf("此为左节点n");L->lchild = qiantao(L->lchild);printf("n");printf("此为右节

42、点n");L->rchild = qiantao(L->rchild);printf("n");printf("创建完毕!n");printf("n");BiTree *qiantao(BiTree *bt)/以中序遍历为基础的一种建立二叉树法int data;printf("注:请输入此节点的值,若为0,此节点不存在!n");printf("此节点值为:"); scanf("%d",&data);if(data = 0)printf("

43、;此节点不存在n");return NULL;elsebt= (BiTree*)malloc(sizeof(BiTree);bt->lchild = NULL;bt->rchild = NULL;bt->data = data;printf("n此为左子节点n");bt->lchild = qiantao(bt->lchild);printf("n此为右子节点n");bt->rchild = qiantao(bt->rchild);return bt;/*前序遍历*/void qianxu_(BiTre

44、e *bt)if(bt = NULL)return;elseprintf("%dt",bt->data);qianxu_(bt->lchild);qianxu_(bt->rchild);void qianxu(BiTree *L)printf("n");printf("开始输出遍历结果n");if(L = NULL)printf("未创建n");elseprintf("结果为:");qianxu_(L);printf("n");printf("先序

45、遍历完毕n");printf("n");printf("n");/*中序遍历*/void zhongxu_(BiTree *bt)if(bt = NULL)return;elsezhongxu_(bt->lchild);printf("%dt",bt->data);zhongxu_(bt->rchild);void zhongxu(BiTree *L)printf("n");printf("开始输出遍历结果n");if(L = NULL)printf("未创

46、建n");elseprintf("结果为:");zhongxu_(L);printf("n");printf("中序遍历完毕n");printf("n");printf("n");/*后序遍历*/void houxu_(BiTree *L)if(L = NULL)return;elsehouxu_(L->lchild);houxu_(L->rchild);printf("%dt",L->data);void houxu(BiTree *L)prin

47、tf("n");printf("开始输出遍历结果n");if(L = NULL)printf("未创建n");elseprintf("结果为:");houxu_(L);printf("n");printf("后驱遍历完毕n");printf("n");printf("n");/*摧毁函数*/void cuihui(BiTree *L)L->data = 0;L->lchild = NULL;L->rchild = NU

48、LL;printf("n");printf("摧毁成功n");printf("n");printf("n");/*作业要求:二叉排序树的创建和输出。介绍:此程序首先将待排序的数字写入了a中,然后将啊a中的数按规则依次放入二叉树中,从而形成了二叉排序树。最后用中序遍历的方法依次输出二叉排序树的数值,从而将啊a的数值成升序排列。并引入了搜索函数,可查找某一数字在二叉排序树的第几行。思考:如果在遍历时按右、中、左的方式,应该可以降序排列,没试过,有空了可以试试。缺点:此程序较为简单,所以缺点不是很多,就我现在看到的而言,

49、其一就是其书写结构太过零散。*/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include <windows.h>/*结构体声明*/typedef struct BiTreeint data;/本节点的元素struct BiTree *lchild,*rchild;/左右根节点BiTree;/*函数声明*/void chuangjian(int a);BiTree *paixu(BiTree *L,int a);void display(BiTree *L);void zhongxu_

50、(BiTree *L);void search(BiTree *L);/*主函数*/main()int a1000;int k;BiTree *L = NULL;a0 = 0;/默认无待排列的数字组while(1)printf("请输入所选择的功能:n");printf("n");printf(" 写待排序组 = 1n");printf("建立二叉排序树 = 2n");printf(" 升序排列 = 3n");printf(" 查找 = 4n");printf("n

51、");printf("选择的功能键为:");scanf("%d",&k);printf("n");switch(k)case 1:chuangjian(a);break;case 2:L = paixu(L,a);break;case 3:display(L);break;case 4:search(L);break;default:printf("输入错误,请重新输入n");printf("n");printf("n");system("paus

52、e");system("cls");/*创建函数*/void chuangjian(int a)/将待排列的数放在a中int i,data;printf("请输入待排序的数字,为0时退出n");printf("此数为:");scanf("%d",&data);for(i=0;data!=0;i+)ai=data;printf("请输入待排序的数字,为0时退出n");printf("此数为:");scanf("%d",&data);

53、ai=0;/设置一个界限printf("创建完成n");printf("n");/*输出函数*/void zhongxu_(BiTree *bt)/输出函数,也不过是中序遍历罢了if(bt = NULL)return;elsezhongxu_(bt->lchild);printf("%dt",bt->data);zhongxu_(bt->rchild);void display(BiTree *L)printf("n");if(L = NULL)printf("未创建n");elseprintf("结果为:");zhongxu_(L);printf("n");printf("n");/*排序函数*/BiTree *paixu (BiTree *L,int a)int i = 1;/从a1开始char flag = 0;BiTree *q,*r;L = (BiTree *)malloc(sizeof(BiTree);L->lchild =

温馨提示

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

评论

0/150

提交评论