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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告Word格式文档下载.docx

1、 /初始化线性表 void insert(sqlist &,int,char); /在线性表中插入元素 void initlist(sqlist & void print(sqlist); /显示线性表中所有元素 void main() sqlist la,lb,lc;/ la,lb,lc是线性表 initial(la); initlist(lb); initlist(lc); int i; for(i=0;i&la.length;i+) if(i%2=0) insert(lb,i/2,la.listi); /奇数位插入lb else insert(lc,i/2,la.listi); /偶数位

2、插入lc printf(n您输入的线性表元素为:nn); print(la); printf(线性表的奇数位次的元素为: print(lb); printf(线性表的偶数位次的元素为: print(lc); v) int i,a; printf(请输入一个偶数作为线性表的长度: scanf(%d,&a); while(a%2!=0) printf(您输入的数是奇数,请重新输入一个偶数: v.length=a; printf(n请输入线性表元素:v.length; scanf(%c,&v.listi); /对la进行赋值 void initlist(sqlist &v) /构造一个空的线性表 v

3、.elem=(char)malloc(max*sizeof(char); v.length=0;v,int j,char c) v.listj=c; /插入c v.length+; void print(sqlist v) printf(%c,v.listi); /输出线性表元素 printf(nn); 调试通过后运行结果如下: 2. 已知线性表la的数据元素(n个),现要求将la的数据元素复制到另一个线性表lb中。 #define max 100 /定义线性表的最大长度 typedef struct void printf(sqlist);/显示线性表中所有元素 void main()i+)

4、 /复制 lb.listi=la.listi; lb.length+; printf(lb); void initial(sqlist&v) / printf(请输入一个线性表的长度(最大为100):n);v.length); printf(请输入线性表元素:v) / void printf(sqlist v) printf(n复制得到的线性表为: printf(%c,v.listi); printf(n); 构造线性表 构造空线性表 3. 设有一个线性表采用顺序存储结构,表中的数据元素值为正整数(n个)。设在o(n) 时间内,将线性表分成两为两部分,其中左半部分每个元素都小于原表的第一个元素

5、,而右半部分则相反。 int elem; int listmax;,int,int);/显示线性表中所有元素 void main() sqlist la,lb,lc; int i=1,j=0,k=0,x=la.list0; for(;i+) if(la.listi&x)insert(lb,j,la.listi);j+; else insert(lc,k,la.listi);k+; printf(n将输入的线性表以首元素为中心分成两部分: printf(%dnn,x); printf(请输入线性表长度:v) / v.elem=(int)malloc(max*sizeof(int);v,int j

6、,int c) / printf(%d,v.listi); / 构造一个空的线性表插入 输出线性表元素 4. 设线性表la(a1, a2, , am),lb(b1, b2, , bn)。试编写一个算法,将la、lb合并为线性表lc,使 ?a1,b1,.,am,bm,bm?1,.,bn?当m?n时lc?a1,b1,.,an,bn,an?1,.,am? 当m?n时 要求la、lb和lc均以单链表为存储结构,且lc表利用la和lb中结点空间,这里m和n的值没有保存在头结点中,并分析算法时间复杂度。stdlib.h& typedef struct node s; char x; struct node

7、* next; s* s_create(s* head) char ch; s *h,*p,*q; h=(s *)malloc(sizeof(s); h-&x= ; p=h; fflush(stdin); /这一句必须加,不然第二次使用该函数时,ch读到的值是回车 scanf(%c,&ch); while(ch!=0) q=(s *)malloc(sizeof(s); q-&x=ch; p-&next=q; p=q;next=null; return h; void s_union(s* head1,s* head2) /s *p=head1-&next,*q=head2-&next,*r=h

8、ead1; /实现两个链表交叉合并为head1 s *h1,*h2; s *upre; h1 = head1; h2 = head2; upre = h1; / puts(合并); /一比一比例交叉合并 if(null = h1) upre = h2; printf(表1为空); else if(null = h2) printf(表2为空); else while(null!=(h1-&next) & null!=(h2-&next) /插入h1节点,并在插入后把upre移到h2节点 h1 = h1-&next; /h1下移一个节点 upre-&next = h2; /插入h1节点,并转而对

9、h2进行操作 upre = h2; /插入h2节点,并在插入后把upre移到h1节点 h2 = h2-&next = h1; /末尾补齐,在上面的情况,最终upre = h1 if(null=(h1-& else h1 = h1-& h2 -& while(p!=null&q!=null) r-&next=p-& r=p; p=p-&next=q-& r=q; q=q-& if(p) next=p; else */ void printf_s(s* head) s *p=head-&=p) printf(%c,p-&x); int main() return 0; s *head1,*head

10、2; /int length1=0,length2=0; head1 = (s *)malloc(sizeof(s);/为head1申请空间 head2 = (s *)malloc(sizeof(s); printf(n输入线性表一(遇0结束): head1=s_create(head1); printf(n线性表一: printf_s(head1); printf(n输入线性表二(遇0结束): head2=s_create(head2); printf(n线性表二: printf_s(head2); printf(n合并后的线性表为: s_union(head1,head2); 5. 约瑟夫

11、问题:设编号为1,2,n的n(n&0)个人按顺时针方向围坐一圈,每人持有一正整数密码。开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列(采用循环单链表结构)。 typedef struct node int num,code; struct node*next; linklist; for(i=1;n;i+) /依次出列 s=(linklist*)malloc(sizeo

12、f(linklist); /分配地址 scanf(%d,&s-&code); s-&num=i+1; int m=0,n=0,i=0,j=0; linklist*head,*s,*r,*p; /声明 printf(n请输入一个正整数作为第一个报数上限值m:m); printf(n请输入一个正整数作为人数n(n最大30):n); printf(n请输入%d个正整数作为每个人的密码:n,n); head=(linklist*)malloc(sizeof(linklist);/分配地址 scanf(%d,&head-& head-&num=1; r=head; s-&next=s; r=r-&nex

13、t=head; printf(n输出出列序号: /输出一次出列的序号 for(j=n;j&0;j-) if(m=1) printf(%d,r-&num);next=r-& m=r-&code;m-1; r=r-& p=r; s=r-& printf(%d,s-&next=s-& r=s-& m=s-& free(s); 释放s 四、 总结 通过上面五个实验对线性表和链表的使用有了初步的了解。 通过程序实现了线性表的拆分,合并,复制,和单链表循环。要注意的是线性表在使用之前都要先初始化,不用的空间最后要释放掉。实验中还涉及到了时间复杂度的计算,提高时间复杂度可以缩短程序运行的时间。 实验二 栈的

14、基本操作 、 定义栈的结点类型。 、 掌握栈插入和删除元素在操作上的特点。 、 熟悉栈的基本操作。 、 加深对栈的理解,逐步培养解决实际问题的编程能力。 1、试编写算法,在顺序存储结构下实现堆栈的下列运算: (1)initstk(s)。初始化操作,建立一个空栈s; stayus initstack(sqstack&s) 个空栈 s.base=(selemtype*)malloc(stack init size*sizeof(selemtype); if(!s.base)exit(overflow); 分配失败 s.top=s.base; s.stacksize=stack init size;

15、 return ok; /initstack /构造一 /存储(2)emptystk(s)。判定栈是否为空; status stackempty(sqstack s) if(s.top=s.base)return true; else return false; /stackempty (3)pushstk(s)。如果栈s不满,在栈顶插入x; status push(sqstack &s,selemtype)/插入元素e为新的栈顶元素 if (s.top-s.base&=s.stacksize) /栈满,追加存储空间 s.base=(selemtype*)realloc(s.base,(s.s

16、tacksize+stackincrement)*sizeof(selemtype); /存储分配失败 s.top=s.base+s.stacksize; s.stacksize+=stackincrement; *s.top+=e; /push (4)popstk(s)。如果栈s不空,删除栈顶元素,并返回该元素的值; status pop(sqstack&s,selemtype&e)/若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok;否则返回error) if(s.top=s.base) return error; e=*-s.top; /pop (5)getstk(s)。如果栈s不空

17、,返回栈顶元素。 status gettop(sqstack s,selemtype&e) /若栈不空,则用e返回s的栈顶元素,并返回ok;否则返回error e=*(s.top-1); /gettop 、 试编写算法,实现数制转换:对于输入的任意一个非负十进制 整数,打印输出与其等值的八进制数。 void conversion() /对于输入的任意一个非负十进制整数,打印、出与其等值的八进制数 initstack(s); /构造空栈 scanf(%d,n);while(n) push(s,n%8); n=n/8; while(!stackempty(s) pop(s,e); printf(%

18、d,e); /conversion 五、 总结 本实验复习了课本上栈这一章的基本算法和内容。栈的操作除了初始化,判断是否为空,插入,删除,返回值之外,还有清空栈,删除栈等等。操作时要注意入栈和出栈的顺序。 实验三 赫夫曼树 一、实验目的 、熟悉二叉树的结点类型和二叉树的基本操作。 、掌握建立赫夫曼树的操作。 3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。 二、实验环境 三、实验内容 完成huffman 编码的译码过程。即输入一个码串,请翻译成相应的字符串。要求有编码过程和解码过程。 (1)构造哈夫曼树;(2)求哈夫曼编码。 include &iostream.h& #include &iomanip.h&string.h& /typedef int telemtype; const int uint_max = 1000; int weight; int parent, lchild, rchild; htnode, *huffmantree; typedef char *huffmancode; /-全局变量- huffmantree

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

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