ImageVerifierCode 换一换
格式:DOCX , 页数:53 ,大小:653.42KB ,
资源ID:5759092      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5759092.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验答案.docx

1、数据结构实验答案重庆文理学院软件工程学院实 验 报 告 册专 业:_软件工程_ _班 级:_软件工程2班_ _学 号:_* _* *_*课程名称:_ 数据结构 _* 2013年 06 月 25 日实验序号1实验名称实验一 线性表基本操作实验地点S-C1303实验日期2013年 04月 22日 实验内容1.编程实现在顺序存储的有序表中插入一个元素(数据类型为整型)。2.编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2.an)变成(an,.a2,a1)。(单链表的数据域数据类型为一结构体,包括学生的部分信息:学号,姓名,

2、年龄)实验过程及步骤1. #include #include #include #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct ElemType elemMAXSIZE; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem 中的位置(下标值),空表置为-1*/SeqList;#include common.h#include se

3、qlist.hvoid px(SeqList *A,int j);void main() SeqList *l; int p,q,r; int i; l=(SeqList*)malloc(sizeof(SeqList); printf(请输入线性表的长度:); scanf(%d,&r); l-last = r-1; printf(请输入线性表的各元素值:n); for(i=0; ilast; i+) scanf(%d,&l-elemi); px(l,i); printf(请输入要插入的值:n); scanf(%d,&l-elemi); i+;px(l,i); l-last+; for(i=0;

4、 ilast; i+) printf(%d ,l-elemi); printf(n);void px(SeqList *A,int j) int i,temp,k; for(i=0;ij;i+) for(k=0;kelemielemk) temp=A-elemi; A-elemi=A-elemk; A-elemk=temp; 2. #include #include #include #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量

5、表示线性表可能达到的最大长度*/typedef struct ElemType elemMAXSIZE; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem 中的位置(下标值),空表置为-1*/SeqList;#include common.h#include seqlist.hvoid px(SeqList *A,int j);int DelList(SeqList *L,int i,SeqList *e,int j)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1iL.last+1 */ int k,a,b,c; if(

6、iL-last+2) printf(删除位置不合法!); return(ERROR); if(jL-last-i) printf(删除位置不合法!); return(ERROR); for(b=0,a=i-1;aelemb=L-elema; e-last=b; /* 将删除的元素存放到e所指向的变量中*/ for(k=i;k+j-1last;k+) L-elemk-1=L-elemk+j-1; /*将后面的元素依次前移*/ L-last=L-last-j; printf(删除的元素值为:); for(c=0;celemc); printf(n); return(OK);void main()

7、SeqList *l,*q; int p,r; int i,j,m; l = (SeqList*)malloc(sizeof(SeqList); q = (SeqList*)malloc(sizeof(SeqList); printf(请输入线性表的长度:); scanf(%d,&r); l-last = r-1; printf(请输入线性表的各元素值:n); for(i=0; ilast; i+) scanf(%d,&l-elemi); px(l,i); for(i=0;ielemi); printf(n); printf(请输入要删除的元素位置(位置+个数):n); scanf(%d%d,

8、&p,&j); m=DelList(l,p,q,j); if(m=0) printf(无法删除); exit(0); else if(m=1) printf(线性表内余下元素为:n); for(i=0;ielemi); printf(n); void px(SeqList *A,int j) int i,temp,k; for(i=0;ij;i+) for(k=0;kelemielemk) temp=A-elemi; A-elemi=A-elemk; A-elemk=temp; printf(排序完成!);3. #include #include #include /*#define Elem

9、Type char*/typedef struct Node /*结点类型定义*/ int num; char name10; int age; struct Node * next;Node, *LinkList; /* LinkList为结构指针类型*/LinkList CreateFromTail()/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/ LinkList L; Node *r, *s; int a; char b10; int c; int flag =1; /*设置一个标志,初值为1,当输入-1时,flag为0,建表结束*/ L=(Node * )

10、malloc(sizeof(Node); L-next=NULL; /*为头结点分配存储空间,建立空的单链表L*/ r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ /*循环输入表中元素值,将建立新结点s插入表尾*/ printf(输入学生的信息:n); printf(学号 姓名 年龄n); while(flag) scanf(%d,&a); if(a=-1) flag=0; else scanf(%s%d,b,&c); s=(Node*)malloc(sizeof(Node); s-num=a; strcpy(s-name,b); s-age=c; r-nex

11、t=s; r=s; r-next=NULL; return L; void ReverseList(LinkList L) Node *p,*q; p=L-next; L-next=NULL; while(p!=NULL) q=p-next; /*q指针保留p-next得值*/ p-next=L-next; L-next=p; /*将p结点头插入到单链表L中*/ p=q; /*p指向下一个要插入的结点*/ void main() LinkList l; Node *p; printf(请输入链表数据,以-1结束!n); l = CreateFromTail(); printf(输入的单链表为:

12、n); p = l-next; while(p!=NULL) printf(%d %s %dn,p-num,p-name,p-age); p=p-next; ReverseList(l); printf(逆置后的单链表为:n); p = l-next; while(p!=NULL) printf(%d %s %dn,p-num,p-name,p-age); p=p-next; 实验结果及分析1.实验结果: 实验分析:我做了三次实验,分别插入数列前,中,后的数字,实验证明代码没有错误,能正常运行、排序、输出。存在的问题:我不明白为什么我写的是降序排序,计算机运行后就是升序排序了。希望老师能帮我修

13、改一下。2.实验结果实验分析:我通过三次实验(正常删除、删除个数超出、删除位置不正确)证明代码的正确性。改代码可实现派讯,删除,读取删除的内容和输出的功能。4.实验结果实验分析: 我做了两次测试,测试证明代码没有错误。教师评阅 教师签名: 年 月 日实验序号2实验名称实验二 栈和队列基本操作实验地点S-C1303实验日期2013年 05 月 13 日 实验内容1.利用栈的运算实现数制转换-分别将十进制转换为八进制和十六进制。2.编程判断一个字符序列是否是回文序列。输入形式为“*#*”,*为输入的字符,#为两序列的分隔符。3.实现链队列管理-输入一个整数,如果是奇数就入队,如果是偶数就让队头出队

14、,直到输入0就结束,最后输出队列的所有元素。实验过程及步骤(代码)1.#include#include#include#define NULL 0typedef struct Numberint num; struct Number *next;Num;void Conversion(int iNum,int i); /转换数字,进栈,iNum为待转换的数,i代表进制void Pop(struct Number *top,int i); /显示结果,出栈,top为栈顶指针,i代表进制void main()int m=8,n=2,j=16; int iNum; char choose,c; pr

15、intf(数制转换nn); printf(请输入一个十进制数: ); scanf(%d,&iNum); printf(转换后结果为:n); printf(n八进制:); Conversion(iNum,m); printf(十六进制:); Conversion(iNum,j); printf(n转换完毕!n);void Conversion(int iNum,int i) /进栈struct Number *top=NULL,*NewP; while(iNum!=0) NewP=(struct Number *)malloc(sizeof(struct Number); if(top=NULL

16、) NewP-next=NULL; top=NewP; top-num=iNum%i; else NewP-next=top; top=NewP; top-num=iNum%i; iNum=iNum/i; /while Pop(top,i); printf(n);void Pop(struct Number *top,int i) /出栈 if(top=NULL) printf(栈空!n); else char cell=0123456789ABCDEF; struct Number *temp,*q; switch(i) case 8: /输出八进制 case 16: /输出十六进制 tem

17、p=top; while(temp!=NULL) printf(%c,celltemp-num); q=temp;temp=temp-next;free(q); break; /switch /else2.#include #include #include int huiWen(const char *p);int main() char test225;printf(请输入序列:n); gets(test); if(huiWen(test) printf(是回文!n); else printf(不是回文!n); getch(); return 0;int huiWen(const char

18、 *p) int i=0,n=strlen(p); while(pi=pn-i-1 & in-i-1) /只要相等且还未相遇则继续循环 i+; return (in-i-1)? 0:1); /若ifront=Q-rear=0;/*入队操作*/int EnterQueue(SeqQueue *Q, int x) /*将元素x入队*/ if(Q-rear+1)%MAXSIZE=Q-front) /*队列已经满了*/ return(FALSE); Q-elementQ-rear=x; Q-rear=(Q-rear+1)%MAXSIZE; /* 重新设置队尾指针 */ return(TRUE); /*

19、操作成功*/*出队操作*/int DeleteQueue(SeqQueue *Q) /*删除队列的队头元素,用x返回其值*/ if(Q-front=Q-rear) /*队列为空*/ return(FALSE); Q-front=(Q-front+1)%MAXSIZE; /*重新设置队头指针*/ return(TRUE); /*操作成功*/int output(SeqQueue *Q) int x,i=Q-front; /*提取队列的队头元素,用x返回其值*/ if(Q-front=Q-rear) /*队列为空*/ return(FALSE); while(i!=Q-rear) x=Q-elem

20、enti; printf(%d ,x); i+; return(TRUE); /*操作成功*/#include seqqueue1.h#includevoid main() int c; SeqQueue Q; InitQueue(&Q); printf(请输入整数:); scanf(%d,&c); while(c!=0) if(c%2=1) EnterQueue(&Q,c); else DeleteQueue(&Q); printf(请输入整数:);scanf(%d,&c); output(&Q); 实验结果及分析(每道题的运行结果及分析总结) 1.实验结果: 实验分析:我测视了两组数据,均

21、正确,证明我的代码没有错误。该代码可实现将一个十进制数转换为八进制和十六进制的数。2.实验结果实验分析: 我做了四次实验有不同长度的回文序列、长度相同的非回文序列和长度不同的非回文序列。实验正经代码正确。3.实验分析:测试了3组不同的数据,均能满足实验要求,证明代码是正确的。教师评阅 教师签名: 年 月 日实验序号3实验名称实验三 二叉树基本操作实验地点S-C1303实验日期2013年 05月 27日 实验内容1.统计一棵二叉树中每种类型结点数(度为0、1、2的结点数)。2.分别输入一棵有6个结点和8个结点的二叉树,编程序输出先序、中序和后序的遍历结果。3.哈夫曼树及哈夫曼编码。实验过程及步骤

22、(代码)1. #include #include #include typedef char DataType;int LeafCount,onecount,twocount;typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;void CreateBiTree(BiTree *bt) char ch; ch = getchar(); if(ch=.) *bt=NULL; else *bt=(BiTree)malloc(sizeof(BiTNode); /生成一

23、个新结点 (*bt)-data=ch; CreateBiTree(&(*bt)-LChild); /生成左子树 CreateBiTree(&(*bt)-RChild); /生成右子树 void leaf_a(BiTree root) if(root!=NULL) leaf_a(root-LChild); leaf_a(root-RChild); if (root -LChild=NULL & root -RChild=NULL) LeafCount+; else if(root -LChild!=NULL) & (root -RChild=NULL)|(root -LChild=NULL) &

24、 (root -RChild!=NULL) onecount+; else if(root -LChild!=NULL) & (root -RChild!=NULL) twocount+; #includehead.hvoid main() BiTree T; int treeleaf; LeafCount = 0; printf(按扩展先序遍历序列建立二叉树,请输入序列:n); CreateBiTree(&T); leaf_a(T); printf(求得的叶子结点数目为:%dn,LeafCount); printf(求得的度为1的结点数目为:%dn,onecount); printf(求得的度为2的结点数目为:%dn,twocount); getch();2. #include #include #include typedef char DataType;int LeafCount,onecount,twocount;typedef struct Node DataType data; struct Node *LChild; struct Node *RChild;BiTNode, *BiTree;void CreateBiTree(BiTree *bt) char ch; ch = getchar(); if(ch=.) *bt=NULL; else

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1