太原理工大学数据结构实验报告2016(共23页).docx
《太原理工大学数据结构实验报告2016(共23页).docx》由会员分享,可在线阅读,更多相关《太原理工大学数据结构实验报告2016(共23页).docx(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构实验报告专业:软件工程班级:软件姓名: 2016年12月太原理工大学学生实验报告学院名称软件学院专业班级软件学号2实验成绩学生姓名实验题目线性表实验日期一目的与要求 本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。二例题 问题描述 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。输入初始字符串,插入位置,插入字符,删除字符。输出已建立链表(字符串),插入字符后链表,删除字符后链表,
2、逆转后链表。存储结构采用链式存储结构算法的基本思想建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。参考源程序#define NULL 0typedef struct node char a; struct node *link;node,*nodelink;void readlink(n
3、odelink head) nodelink p,q; char c; p=head; printf(Input a linktable(a string):); scanf(%c,&c); if (c=n) printf(This string is empty。); while(c!=n) q=(nodelink)malloc(sizeof(node); q-a=c; p-link=q; p=q; scanf(%c,&c); p-link=NULL;void writelink(nodelink head) nodelink q; if (head-link=NULL) printf( T
4、his link is empty。n); for(q=head-link;q;q=q-link) printf(%c,q-a); printf(n); int insert(nodelink head,char k1,char k2) nodelink p,q; p=head-link; while(p-a!=k1&p) p=p-link; if(p) q=(nodelink)malloc(sizeof(node); q-a=k2; q-link=p-link; p-link=q; return 1; else printf(There is no %cn,k1); return 0; in
5、t delete(nodelink head,char k) nodelink p,q; q=head; p=head-link; while(p-a)!=k)&p) q=q-link; p=p-link; if(p) q-link=p-link; return 1; else printf(There is no %cn,k); return 0; void opside(nodelink head) nodelink p,q; p=head-link; while(p-link) q=p-link; p-link=q-link; q-link=head-link; head-link=q;
6、 main() char k1,k2,k3; nodelink head; head=(nodelink)malloc(sizeof(node); head-link=NULL; readlink(head); if (head-link!=NULL) printf(Build link is :); writelink(head); if (head-link!=NULL) printf(Please input a char you want to insert after:); k1=getch(); printf(%cn,k1); printf(Please input a char
7、you want to insert:); k2=getch(); printf(%cn,k2); if (insert(head,k1,k2) printf(After %c insert %c,link is:,k1,k2); writelink(head); printf(Please input a char you want to delete:); k3=getch(); printf(%cn,k3); if (delete(head,k3) printf(after delete %c,link is:,k3); writelink(head); if (head-link!=N
8、ULL) printf(Opsite result is :); opside(head); writelink(head); free(head); 运行情况Input a linktable(a string):lopuiBuild link is :lopuiPlease input a char you want to insert after:pPlease input a char you want to insert:yAfter p insert y,link is:lopyuiPlease input a char you want to delete:pafter dele
9、te p,link is:loyuiOpsite result is :iuyol三实习题用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+anxn(其中aI为非零系数),用单链表hb 存储多项式B(x )=b0+b1x1+b2x2+bmxm(其中bj为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。试写出程序。 实验程序:#includestdio.h#include #includestdafx.h#includestatic int n;static int m;static int max;struct Polynomialfloat dat
10、a;struct Polynomial* next;struct Polynomial* Creat_H(int k)struct Polynomial* L;struct Polynomial* p;p = (struct Polynomial*)malloc(sizeof(struct Polynomial);L = p;float temp;int i;printf(请依次输入系数(中间用空格隔开):n);for (i = 0; i data = temp;if (i = k)p-next = NULL;break;p-next = (struct Polynomial*)malloc(
11、sizeof(struct Polynomial);p = p-next;return L;struct Polynomial* Calculate(struct Polynomial* Pa, struct Polynomial* Pb)struct Polynomial* Pc;struct Polynomial* L;int i;max = n = m ? n : m;Pc = (struct Polynomial*)malloc(sizeof(struct Polynomial);L = Pc;for (i = 0; i next = NULL;break;Pc-next = (str
12、uct Polynomial*)malloc(sizeof(struct Polynomial);Pc = Pc-next;Pc = L;while (Pa != NULL&Pb != NULL)Pc-data = Pa-data + Pb-data;Pc = Pc-next;Pa = Pa-next;Pb = Pb-next;if (Pa = NULL)while (Pb != NULL)Pc-data = Pb-data;Pc = Pc-next;Pb = Pb-next;else if (Pb = NULL)while (Pa != NULL)Pc-data = Pa-data;Pc =
13、 Pc-next;Pa = Pa-next;return L;int main()int i;struct Polynomial *Ha, *Hb, *Hc;printf(请输入多项式a的最高次系n:n);scanf_s(%d, &n);Ha = Creat_H(n);printf(请输入多项式b的最高次系m:n);scanf_s(%d, &m);Hb = Creat_H(m);Hc = Calculate(Ha, Hb);printf(系数: 次数:n);for (i = 0; i data, i);if (i = max)break;Hc = Hc-next;return 0;实验室名称致
14、远楼指导教师姓名张月琴太原理工大学学生实验报告学院名称软件学院专业班级软件1学号实验成绩学生姓名实验题目树实验日期. 一目的与要求熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。二例题问题描述任意给定一棵二叉树。试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。输入一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。对下图,其输入序列为ABD.EH.CF.I.G.。 A B C D E F G H I 输出若为空二叉树,则输出:THIS IS A EMPTY BINARY TREE。若二叉树不空,
15、按后序序列输出,对上例,输出结果为:DHEBIFGCA。存储结构采用二叉链表存储。算法的基本思想采用递归方法建立和遍历二叉树。首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。后序遍历二叉树时,先遍历左子树,后遍历右子树,最后访问根结点。参考源程序#include#include struct nodechar info;struct node *llink,*rlink;typedef struct node NODE;NODE *creat()char x;NODE *p; scanf(%c,&x);printf(%c,x);if(x!=.)p=(NODE *)malloc(si
16、zeof(NODE);p-info=x;p-llink=creat();p-rlink=creat(); elsep=NULL;return p;void run(NODE *t)if(t)run(t-llink);run(t-rlink);printf(%c,t-info); main()NODE *T;printf(PLease input a tree:n);T=creat();printf(n);if(!T)printf(This is a empty binary tree.);else printf(The result of post travese is:n );run(T);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 数据结构 实验 报告 2016 23
限制150内