数据结构实验报告14820.doc
《数据结构实验报告14820.doc》由会员分享,可在线阅读,更多相关《数据结构实验报告14820.doc(20页珍藏版)》请在沃文网上搜索。
1、 计算机科学与技术学院 实验报告课程名称:数据结构 专 业:计算机科学与技术班 级:2011 级 1 班 学 号: 201113137024 姓 名: 镇方权 指导老师: 邱奕敏 20 实验一1. 实验题目设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。2. 程序核心代码struct LNode int data; struct LNode *next; ; typedef stru
2、ct LNode *LinkList;LinkList Union( LinkList ha, LinkList hb ) LinkList head = (LNode*)malloc(sizeof(LNode); head-next = ha; LNode* pa,*pb,*pTmp; pa = ha-next; pb = hb-next; pTmp = ha; while ( pa&pb ) if ( pa-data data ) pTmp = pa; pa = pa-next; else if ( pa-data pb-data ) LNode* Lr = (LNode*)malloc(
3、sizeof(LNode); Lr-data = pb-data; Lr-next = pa; pTmp-next = Lr; pTmp = Lr; pb = pb-next; else pTmp = pa; pa = pa-next; pb = pb-next; if ( pa ) pTmp-next = pa; else while ( pb ) LNode* Lr = (LNode*)malloc(sizeof(LNode); Lr-data = pb-data; pTmp-next = Lr; pTmp = Lr; pb = pb-next; pTmp-next = NULL; fre
4、e(head); return ha;int ListInsert(LinkList L,int i,int e) int j=0; LinkList p=L,s; while(p&jnext; j+; if(!p|ji-1) return 0; s=(LinkList)malloc(sizeof(struct LNode); /* 生成新结点 */ s-data=e; /* 插入L中 */ s-next=p-next; p-next=s; return 1; int main()LinkList ha,hb;int n,i;int data; InitList(&ha);printf(请输入
5、ha中数据的个数: );scanf(%d,&n);printf(请依次输入ha中的数据:n);for(int i = 1;i next;while(p)printf(%d ,p-data);p = p-next;printf(n); InitList(&hb);printf(请输入hb中数据的个数: );scanf(%d,&n);printf(请依次输入hb中的数据:n);for(i = 1;i next;while(p)printf(%d ,p-data);p = p-next;printf(n);printf(hb归并到ha后,新的ha=);p = Union(ha,hb)-next;wh
6、ile(p)printf(%d ,p-data);p = p-next;printf(n);system(pause);return 0;3. 运行结果 4.实验总结 要注意归并时若ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。 实验二1. 实验题目 结合书上第41页的例子(一元多项式相加),采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。2. 程序核心代码typedef struct LNodeint data; /存储系数int flag; /存储对应幂数struct LNode *next;LNode;/建立带头结点的单链表,n
7、项多项式void CreateList(LNode *L, int n)LNode *p;int i = 0;*L = (LNode *) malloc (sizeof(LNode);(*L)-next = NULL; for (i = 0; idata),&(p-flag); p-next = (*L)-next;(*L)-next = p; /插入链表/多项式L1与L2对应项相加得到新的L2void PolyoAdd(LNode *L1, LNode *L2) int ck;LNode *p,*q;p = NULL;q = NULL;q = (*L1)-next;while(q)ck =
8、0;p = (*L2)-next;while(p) if (q-flag = p-flag) ck = 1; break; p = p-next;if (ck = 1) /同类项合并p-data += q-data;q = q-next;else /否则,直接将非同类项插到L2最前面(*L1)-next = q-next;q-next = (*L2)-next;(*L2)-next = q;q = (*L1)-next;int main()int m=0;LNode *p1,*p2;p1 = NULL;p2 = NULL;printf(设定多项式A的项数:n);scanf(%d,&m);pri
9、ntf(请输入多项式A的系数及对应位幂次:n);CreateList(&p1,m);printf(A);PolyoPrint(&p1);printf(设定多项式B的项数:n);scanf(%d,&m);printf(请输入多项式B的系数及对应位幂次:n);CreateList(&p2,m);printf(B);PolyoPrint(&p2);PolyoAdd(&p1,&p2);printf(相加后的);PolyoPrint(&p2);system(pause);return 0;3. 运行结果4. 实验总结合并多项式是指相同指数的项的系数相加,比较两个链表的节点的指数的大小,作为指针移动的条件
10、,同事合并的过程中应消除系数项为零的节点。 实验三1. 实验题目 二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。其中指针lchild下标datalchildrchild 1 A 2 6 2 B 3 4 3 C 0 0 4 D 5 0 5 E 0 0 6 F 0 7 7 G 0 0和rchild的类型为bitree。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。所不同的是,lchild和rdhild 为integer型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为0。例
11、如,二叉树的静态二叉链表如上图所示。编写算法由二叉树的动态二叉链表构造出相应的静态二叉链表a1.n,并写出其调用形式和有关的类型描述。其中n为一个确定的整数。2. 程序核心代码 typedef struct BiTNodechar data;struct BiTNode *lchild,*rchild;BiTNode, *BiTree;typedef struct Node /静态链表结点结构 char data; /结点数据 int row,lchild,rchild ; /下标,左右孩子Node;Node *st; /st容量足够大static int length=0;static in
12、t num=0;void createBiTree(BiTree &T) char ch; scanf(%c,&ch); if (ch=#) T = NULL; else if (!(T = (BiTNode *)malloc(sizeof(BiTNode) printf(error); T-data = ch; / 生成根结点 createBiTree(T-lchild); / 构造左子树 createBiTree(T-rchild); / 构造右子树 void PreOrder(BiTree bt)/ 先序遍历二叉树,填写静态链表的“下标”和data域if (bt) st+num.data
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 14820
