《数据结构与算法实验报告(共10页).doc》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数据结构与算法综合实验报告系 别: 专 业: 学生姓名: 指导教师: 2011年 11月 25日实验目的掌握线性表的建立、插入、删除算法;掌握查找算法;掌握排序算法;实验要求使用C语言(环境任意)开发程序,能够对用户输入的任意一组数据,建立一个线性表,可以输出此线性表。并且能够对此线性表进行插入、删除、查找、排序等操作。程序流程建表如下:定义一个整型的数据类型data和next指针:定义头指针和当前结点指针,申请连续空间将单个字节大小复制给头指针,把头指针赋值给当前节点指针:若输入的数是0,则若输入不为0,把输入的数赋值给已申请的新结点,把新结点赋给当前节点的next
2、域,再把新结点赋值给当前结点,以此方法重复执行得到如下链表:输出函数:把头指针赋值给当前结点指针,当当前节点的next域不为空时输出当前节点所指向的数据,把当前结点的next域赋值给当前节点,否则输出链表为空对此线性表进行插入、删除、查询、排序操作把已申请的结点数据域指向所输入的数再把插入w结点赋值头结点,是插入的位置,如果w=0则插入结点的next域赋值给头结点否则如果w表长,则输出超出范围代码及运行结果(主要语句要求有注释)#includestdafx.h#include#include#define NULL 0typedef struct linknode int data; stru
3、ct linknode *next;node;node *head;node *creat() node *currnode,*newnode; int x; head=(node*)malloc(sizeof(node); currnode=head; do scanf(%d,&x);newnode=(node*)malloc(sizeof(node);newnode-data=x;currnode-next=newnode;currnode=newnode; while(x!=NULL); head=head-next; currnode-next=NULL; return head;in
4、t length() node *currnode; int i=0; currnode=head; while(currnode-data!=NULL) currnode=currnode-next; i+; ; return i;void print() node *currnode; currnode=head; printf(链表如下.linklist); while(currnode-data!=NULL) printf(%d-,currnode-data); currnode=currnode-next; ; printf(NULLn); printf(链表长度为.linklist
5、 length%dn,length();void delete1() int x; node *delnode,*currnode; printf(输入要删除的数据.input delete data:); scanf(%d,&x); if(head-data=NULL) printf(此链表为空无法删除.this linklist empty!n); if(head-data=x) delnode=head; head=head-next; free(delnode); if(head=NULL) printf(此链表为空.this linklist enpty!); else currno
6、de=head; delnode=currnode-next; while(delnode-data!=x&delnode!=NULL) currnode=currnode-next;delnode=currnode-next; ; if(delnode=NULL)printf(无此数据.no this data!n); else currnode-next=delnode-next; free(delnode); ; ;void find() node *currnode; int count=1,x; currnode=head; printf(输入要查找的数据.input search
7、data:); scanf(%d,&x); while(currnode-data!=NULL&currnode-data!=x) currnode=currnode-next; count+; ; if(currnode-data!=NULL) printf(n%d为第.is no.,currnode-data); printf(%d个数据.data。n,count); else printf(n无此数据.not this data!n);void insert() int x,w,i; node *insertnode, *afternode,*currnode; printf(输入要插入
8、的数据Y.input inserte data:); scanf(%d,&x); printf(插入n结点后.insert after no. data n=:(0,1,); scanf(%d,&w); insertnode=(node*)malloc(sizeof(node); insertnode-data=x; if(w=0) insertnode-next=head; head=insertnode; else if(wlength() printf(超出范围.overflow!n); else currnode= head;afternode=currnode-next; for(i
9、=1;inext; currnode=currnode-next;currnode-next=insertnode;insertnode-next=afternode; ;void sort(node * *head)node *p,*q,*r,*s,*h1;h1=p=(node *)malloc(sizeof(node);p-next=*head;while(p-next-data!=NULL) q=p-next; r=p;while(q-next-data!=NULL)if (q-next-datanext-data)r=q;q=q-next;if(r!=p)s=r-next;r-next
10、=s-next;s-next=p-next;p-next=s;p=p-next;*head=h1-next;free(h1);void operation() printf(nn删除数据输入.delete1: 1n); printf(n查找数据输入.search: 2n); printf(n插入数据输入.insert: 3n); printf(n排序数据输入.sort: 4n); printf(n结束操作.end: 5n); printf(n?:);void main() int choic; printf(n输入数据以0结束.input data 0 end:n); head=creat()
11、; print(); operation(); do scanf(%d,&choic); switch(choic) case 1: delete1(); print(); operation(); break; case 2: find(); operation(); break; case 3:insert(); print(); operation(); break; case 4:sort(&head); print(); operation(); break; default:printf(操作结束.operate end!); break; ; while(choic!=5);个人
12、总结(要求1000字以上)数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。所以,大家在这三章上可以不必花费过多的精力,只要知道基本的概念即可。但是,对于报考名校特别是该校又有在试卷中对这三章进行过考核的历史,那么这部分朋友就要留意这三章了。按照以上我们给出的章节以及对后三章的介绍,数据结构的章节比重大致为:概论:内容很少,概念简单,分数大多只有几分,有的学校甚至不考。线性表:基
13、础章节,必考内容之一。考题多数为基本概念题,名校考题中,鲜有大型算法设计题。如果有,也是与其它章节内容相结合。栈和队列:基础章节,容易出基本概念题,必考内容之一。而栈常与其它章节配合考查,也常与递归等概念相联系进行考查。串 :基础章节,概念较为简单。专门针对于此章的大型算法设计题很少,较常见的是根据KMP进行算法分析。多维数组及广义表 :基础章节,基于数组的算法题也是常见的,分数比例波动较大,是出题的“可选单元”或“侯补单元”。一般如果要出题,多数不会作为大题出。数组常与“查找,排序”等章节结合来作为大题考查。树和二叉树 :重点难点章节,各校必考章节。各校在此章出题的不同之处在于,是否在本章中
14、出一到两道大的算法设计题。通过对多所学校的试卷分析,绝大多数学校在本章都曾有过出大型算法设计题的历史。图 :重点难点章节,名校尤爱考。如果作为重点来考,则多出现于分析与设计题型当中,可与树一章共同构成算法设计大题的题型设计。查找 :重点难点章节,概念较多,联系较为紧密,容易混淆。出题时可以作为分析型题目给出,在基本概念型题目中也较为常见。算法设计型题中可以数组结合来考查,也可以与树一章结合来考查。排序 :与查找一章类似,本章同属于重点难点章节,且概念更多,联系更为紧密,概念之间更容易混淆。在基本概念的考查中,尤爱考各种排序算法的优劣比较此类的题。算法设计大题中,如果作为出题,那么常与数组结合来考查。专心-专注-专业