欢迎来到天天文库
浏览记录
ID:35627008
大小:160.79 KB
页数:16页
时间:2019-04-03
《数据结构课程设计报告--链表操作》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《数据结构》课程设计报告题目:链表操作专业:软件工程班级:09级(2)班姓名:戴素娟学号:090107021102指导老师:杨薇薇王方设计时间:2011年12月5日~2011年12月18日目录1.设计题目……………………………………………2.设计目的……………………………………………3.设计内容和要求……………………………………4.运行环境(软和硬件)……………………………5.算法设计的思想……………………………………6.算法流程图…………………………………………7.算法设计分析………………………………………8.源代码………………………………………………9.运行结果及分析………………
2、……………………10.收获及体会………………………………………一、设计题目链表的基本操作二、设计目的1.掌握线性链表的建立。2.掌握线性链表的基本操作。三、设计内容和要求利用链表的插入运算建立线性链表,然后实现链表的查找、删除、计数、输出、排序、逆置等运算,插入、删除、查找、计数、输出、排序、逆置要单独写成函数,并能在屏幕上输出操作前后的结果。四、运行环境(软、硬件环境)VisualC++6.0Win9x/NT/2000/XP/2003/7环境下均可以运行。五、算法设计的思想1.数据结构定义了一个lian的结构体intnum;structlian*next;。2.链表的建立是利用尾插
3、法来完成的;q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;3.遍历算法是从头开始遍历,找到了就输出该数,没有就显示没有找到;4.计数链表中的节点个数是用一个循环p->next!=NULL时就继续计数;5.链表的输出,通过p=p->next一个个进行遍历输出。6.链表的排序算法,从小到大进行排序,通过循环来达到。保持head结点不变,p指向第一个结点,q=p->next,p所指结点依次和后面的结点比较,比它大则交换,否则继续后移动q=q->next;for(i=0;i4、;i++){p=p->next;q=p->next;for(j=i+1;jnum>p->num){temp=p->num;p->num=q->num;q->num=temp;}q=q->next;}7.链表的插入llinkinsert(llinkhead,llinkptr,intm)和删除llinkdelet(llinkhead,llinkptr)设计比较简单没什么技巧8.链表的倒置输出,保持head头结点不动,p指针指向第一个结点,p向后流动,q指针指向p的后一个结点,把q所指结点插在head和p之间。p=llist->next;llist->nex5、t=NULL;while(p!=NULL){q=p->next;p->next=llist->next;llist->next=p;p=q;}一、算法的流程图开始main函数Intarray[n];llistp;P=create(array,len);While(choice)Print(p);Choice==11delet(p,ptr);Choice==2insert(p,ptr,m);Choice==3Choice==4sort(p,5);search(p,m);Choice==5count(p);Choice==6Daozhi(p);Choice==7Choice==0结束二、6、算法设计分析算法设计较为简单,时间复杂度O(n*n);一、源代码#include#include#includetypedefstructlian{/*单个链表节点的结构体*/intnum;structlian*next;}node;typedefnode*llink;/*建立链表函数*/llinkCreat(intarray[],intlen){llinkhead;llinkp,q;inti;head=(llink)malloc(sizeof(node));head->next=NULL;p=head;for(i=0;i7、en;i++){q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;}returnhead;}/*遍历操作函数*/voidPrint(llinkhead){llinkp;p=head->next;printf("输出链表:");while(p!=NULL){printf("%5d",p->num);p=p->next;}printf("");}
4、;i++){p=p->next;q=p->next;for(j=i+1;jnum>p->num){temp=p->num;p->num=q->num;q->num=temp;}q=q->next;}7.链表的插入llinkinsert(llinkhead,llinkptr,intm)和删除llinkdelet(llinkhead,llinkptr)设计比较简单没什么技巧8.链表的倒置输出,保持head头结点不动,p指针指向第一个结点,p向后流动,q指针指向p的后一个结点,把q所指结点插在head和p之间。p=llist->next;llist->nex
5、t=NULL;while(p!=NULL){q=p->next;p->next=llist->next;llist->next=p;p=q;}一、算法的流程图开始main函数Intarray[n];llistp;P=create(array,len);While(choice)Print(p);Choice==11delet(p,ptr);Choice==2insert(p,ptr,m);Choice==3Choice==4sort(p,5);search(p,m);Choice==5count(p);Choice==6Daozhi(p);Choice==7Choice==0结束二、
6、算法设计分析算法设计较为简单,时间复杂度O(n*n);一、源代码#include#include#includetypedefstructlian{/*单个链表节点的结构体*/intnum;structlian*next;}node;typedefnode*llink;/*建立链表函数*/llinkCreat(intarray[],intlen){llinkhead;llinkp,q;inti;head=(llink)malloc(sizeof(node));head->next=NULL;p=head;for(i=0;i7、en;i++){q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;}returnhead;}/*遍历操作函数*/voidPrint(llinkhead){llinkp;p=head->next;printf("输出链表:");while(p!=NULL){printf("%5d",p->num);p=p->next;}printf("");}
7、en;i++){q=(llink)malloc(sizeof(node));q->num=array[i];q->next=NULL;p->next=q;p=p->next;}returnhead;}/*遍历操作函数*/voidPrint(llinkhead){llinkp;p=head->next;printf("输出链表:");while(p!=NULL){printf("%5d",p->num);p=p->next;}printf("");}
此文档下载收益归作者所有