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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《C语言》数据机构实验报告.docx

1、C语言数据机构实验报告数据结构实验报告实验一:抽象数据类型的实现-以集合为例问题:以集合为例设计一个抽象数据类型;1. 集合是对象的无序组合,我们可以把集合定义成一个新的数据类型;2. 为了简化可以把集合限制为有限整数元素的集合,有了这个限制,集合可以作为一个静态整数数组实现;3. 为了 操作方便,在处理对象中还包括集合的元素个数(即:集合基数)。C语言程序代码:/-#include #include#define maxCard 16#define maxLen 64#define noErr 1#define overflow 0/-/定义结构体Set和Set_productstruct

2、Set int elemsmaxCard; int card; ;struct Set_product char elemsmaxCard*maxCardmaxLen; int card; ;/-/ 函数声明void EmptySet(Set *);int AddElem(Set *, int );void Print(Set *);void RmvElem(Set *,int );bool Member(Set *,int );void Copy(Set * , Set * );void Intersect(Set * , Set * , Set * );int Union(Set * ,

3、Set * , Set * );bool Equal(Set * , Set * );bool Subset(Set * , Set * );bool PSubset(Set * , Set * );void Cartesian_product(Set * , Set * , Set_product *);void Print(Set_product *);/-/ 主函数调用int main() Set s1,s2,s3; Set_product ss1; EmptySet(&s1); EmptySet(&s2); EmptySet(&s3); AddElem(&s1,10); AddElem

4、(&s1,20); AddElem(&s1,30); AddElem(&s1,40); AddElem(&s2,30); AddElem(&s2,50); AddElem(&s2,10); AddElem(&s2,60); couts1 = ; Print(&s1); couts2 = ; Print(&s2); RmvElem(&s2,50); couts2 - 50 = ; Print(&s2); if (Member(&s1,20) cout20 is in s1 endl; Intersect(&s1, &s2, &s3); couts1 intsec s2 = ; Print(&s3

5、); Union(&s1, &s2, &s3); couts1 union s2 = ; Print(&s3); if (Subset(&s1,&s3) couts1 is the subset of s3 endl; if (PSubset(&s1,&s3) couts1 is the pure subset of s3 endl; if (!Equal(&s1,&s2) couts1 /= s2 endl; else couts1 = s2 endl; Cartesian_product(&s1, &s2, &ss1); coutcard = 0; int AddElem(Set *set

6、, int elem) for (int i=0; icard; +i) if (set-elemsi=elem) return noErr; if (set-cardelemsset-card+=elem; return noErr; else return overflow; /AddElem/-/函数Print void Print(Set *set) if (set-card=0)/ cout The Set has no element!n; cout endl; else cout ; for (int i =0; icard-1; +i) cout elemsicard0) co

7、ut elemsset-card-1; cout card=0)/ cout The Set has no element!n; cout endl; else cout ; for (int i =0; icard-1; +i) cout elemsicard0) cout elemsset-card-1; cout endl; /Print Cartesian_product/-/函数RmvElemvoid RmvElem(Set *set,int elem) for (int i=0; icard; +i) if (set-elemsi=elem) for (; icard-1;+i)

8、set-elemsi=set-elemsi+1; -set-card; /RmvElem/-/函数Memberbool Member(Set *set,int elem) for(int i=0; icard; +i) if (set-elemsi=elem) return true; return false; /Member/-/函数Copy void Copy(Set * set, Set * res) for (int i =0; icard; +i) res-elemsi=set-elemsi; res-card=set-card; /Copy/-/函数Equal bool Equa

9、l(Set * set1, Set * set2) if (set1-card!=set2-card) return false; for (int i=0; icard; +i) if (!Member(set2,set1-elemsi) return false; return true; /Equal /-/函数Intersectvoid Intersect(Set * set1, Set * set2, Set * res) res-card=0; for (int i=0;icard; +i) for (int j=0;jcard;+j) if (set1-elemsi=set2-e

10、lemsj) res-elemsres-card+=set1-elemsi; break; /Intersect /-/函数Union int Union(Set * set1, Set * set2, Set * res) Copy(set1, res); for (int i=0;icard;+i) if (AddElem(res, set2-elemsi)=overflow) return overflow; return noErr; /Union/-/函数Subsetbool Subset(Set * set1, Set * set2) if (set1-card set2-card

11、) return false; for (int i=0;icard;+i) if (!Member(set2,set1-elemsi) return false; return true; /Subset/-/函数PSubsetbool PSubset(Set * set1, Set * set2) if (set1-card card & Subset(set1,set2) return true; /PSubset/-/函数Cartesian_productvoid Cartesian_product(Set * set1, Set * set2, Set_product *res) i

12、nt k=0; res-card=set1-card*set2-card; for (int i=0 ;icard; +i) for (int j=0;jcard;+j,+k) sprintf ( res-elemsk, (%d,%d), set1-elemsi, set2-elemsj); 实验二: 链表及其应用问题:试编一个算法,将一个用单链表表示的稀疏多项式分解两个多项式。1.这两个多项式中各自仅含奇次项或偶次项;2.要求利用原链表中的节点空间构成这两个多项式。C语言程序代码:#include #include typedef struct float coef; int expnum;

13、 term, ElemType; /数据包括底数,次数;typedef struct LNode ElemType data; struct LNode *next;LNode, *LinkList; /声明节点为Lnode型和LinkList的指针;void CreateList_L(LinkList&L, int n );void Display_L(LinkList L);void Split_L(LinkList &plyn, LinkList &odd);void Reverse_L(LinkList L);void main() int NodeNum = 4; LinkList

14、List, oddList; CreateList_L(List, NodeNum); Display_L(List); Reverse_L(List); Display_L(List); Split_L(List, oddList); Display_L(List); Display_L(oddList); / 输入n个元素的值,利用尾插法建立带表头结点的单链线性表L void CreateList_L(LinkList&L, int n) LinkList p,Pre; int i; L = (LinkList)malloc(sizeof(LNode);/先建立一个带头节点的线性链表; P

15、re=L; for (i=0; idata.expnum); printf(the coef is :); scanf(%f,&p-data.coef); /输入数据的底数; Pre-next = p; Pre = p; / 修改尾指针; Pre-next=NULL; void Display_L(LinkList L)/输出次数与底数; L = L-next; while (L) printf(The expnum is :);/次数; printf(%dn,L-data.expnum); printf(The coef is :); printf(%.2fn,L-data.coef); L

16、 = L-next; printf(n);void Reverse_L(LinkList L) LinkList p = NULL, q, s; q = L-next; while (q) s = q-next; q-next = p; p = q; q = s; L-next = p;/Reverse_Lvoid Split_L(LinkList &plyn, LinkList &odd) LinkList p,q,s; odd = (LinkList)malloc(sizeof(LNode); odd-next= NULL; q=plyn; p=plyn-next; s=odd; whil

17、e(p) if (p-data.expnum%2 = 0) q=p; p=p-next; else q-next=p-next; /在原表中删除奇次项节点 s-next=p; /将奇次项节点插入到新表中 p=q-next; s=s-next; s-next=NULL; /Split_L实验三:队列和栈的使用问题:试编写一个算法,利用栈将队列逆置;1.栈和队列的数据元素都使用整型变量;2.队列用链式存储,栈用动态的顺序存储;C语言程序代码:/-#include /#include #include /-typedef struct float coef; int expnum; term, El

18、emType; typedef struct LNode ElemType data; struct LNode *next;LNode, *LinkList;/-void CreateList_L(LinkList &, int );void Display_L(LinkList );void Split_L(LinkList &, LinkList &);void Reverse_L(LinkList );/-void main() int NodeNum = 4; LinkList List, oddList; CreateList_L(List, NodeNum); Display_L

19、(List); Reverse_L(List); Display_L(List); Split_L(List, oddList); Display_L(List); Display_L(oddList); /main/-void CreateList_L(LinkList &L, int n) / 逆位序输入n个元素的值,建立带表头结点的单链线性表L LinkList p; int i; L = (LinkList)malloc(sizeof(LNode); L-next = NULL; / 先建立一个带头结点的单链表 for (i=n; i0; -i) p = (LinkList)mallo

20、c(sizeof(LNode); / 生成新结点 coutp-data.expnum; coutp-data.coef; p-next = L-next; L-next = p; / 插入到表头 / cout 链表生成. next; cout ; while (L) cout ( data.coef ,; cout data.expnum next; cout next; while (q) s = q-next; q-next = p; p = q; q = s; L-next = p;/Reverse_L/-void Split_L(LinkList &plyn, LinkList &odd) LinkList p,q,s; odd = (LinkList)malloc(sizeof(LNode); odd-next= NULL; q=ply

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

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