数据结构与算法实验报告-线性表.doc_第1页
数据结构与算法实验报告-线性表.doc_第2页
数据结构与算法实验报告-线性表.doc_第3页
数据结构与算法实验报告-线性表.doc_第4页
数据结构与算法实验报告-线性表.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈 阳 工 程 学 院学 生 实 验 报 告(课程名称: 数据结构与算法 )实验题目: 线性表 班 级 网本112班 学 号 2011414217 姓 名 樊鹏鹏 地 点 F606 指导教师 吕海华、祝世东 实 验 日 期 : 2012 年 9 月 27 日一、实验目的1 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。2 掌握线性表的顺序存储结构的定义及其C语言的实现。3 掌握线性表的链式存储结构单链表的定义及其C语言的实现。4 掌握线性表的基本操作二、实验环境Turbo C或是Visual C+三、实验内容与要求实验1 顺序表的操作请编制C程序,利用顺序存储方式来实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行表的创建,数据的插入删除并在插入和删除数据后再输出线性表;最后在屏幕菜单中选择0,即可结束程序的运行。分析:当我们要在顺序表的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素一次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。当要删除第i个元素时,也只需将第i个元素之后的所有元素前移一个位置。算法描述:对每个算法,都要写出算法的中文描述。本实验中要求分别写出在第i个(从1开始计数)结点前插入数据为x的结点、删除指定结点、创建一个线性表。打印线性表等的算法描述。实验2 单链表的操作请编制C程序,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。具体地说,就是要根据键盘输入的数据建立一个单链表;然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最后在屏幕菜单中选择0,即可结束程序的运行。算法描述:本实验要求分别写出在单链表中第i(从1开始计数)个位置之后插入元素、创建单链表、在单链表中删除第i个位置的元素、顺序输出单链表的内容等的算法描述。四、实验过程及结果分析顺序表:#include #include #define SIZE 100int L=0;struct numberlong num;/*-创建顺式线性表-*/struct number *creat(void)struct number *head,*p1;p1=head=(struct number*)malloc( SIZE * sizeof(struct number);scanf(%ld,&p1-num);for(;p1-num!=0;L+)p1+;scanf(%ld,&p1-num);return(head);/*-输出顺式线性表中的元素-*/void print(struct number*head)struct number *p;int s=L;p=head;if(p!=0)printf(n您输入的数据为:n);for(;s0;p+,s-)printf(%ld ,p-num);/*-查找顺式线性表中的元素-*/void search(struct number *head)struct number *p;long num1;int n=0,s=0;p=head;printf(n请输入您要查找的数据:n);scanf(%ld,& num1);if(head!=0)for(;p-num!=0;p+)n+;if(p-num=num1)s=1;break;if(s=0)printf(n没有您所要查找的数据n);elseprintf(n找到您所需数据%ld在表中第%d个n,num1,n);/*-插入顺式线性表的元素-*/struct number *insert(struct number*head)struct number *p1,*p2;int n=1;long num1;p1=p2=head;p2=p2+L-1;printf(n请输入您要插入的数据:n);scanf(%ld,&num1);if(num1num)for(p1=head;p1-num=p1;p2-)(p2+1)-num=p2-num;(p2+1)-num=num1;L+;return(head);/*-删除顺式线性表的元素-*/struct number *del(struct number*head)struct number *p1,*p2;long num1;int n=1;p1=p2=head;printf(n请输入要删除的数据:n);scanf(%ld,&num1);p2=p2+L-1;for(;p1-num!=num1 & nL)printf(n没有您要删除的数据n);return(0);elsefor(;p1num=(p1+1)-num;L-; return(head);void main()struct number *head,*head1,*head2;int a;/*head=creat(); print(head);*/printf(n*n); printf( 按1:创建n); printf( 按2:插入n); printf( 按3:查找n); printf( 按4:删除n); printf( 按5:输出n); printf( 按0:退出n); printf(*n);scanf(%d,&a);while(a!=0)switch(a)case 1:printf(请创建顺序表:); head=creat();break;case 2:head1=insert(head);break;case 3:search(head);break;case 4:head2=del(head);break; case 5:print(head);case 0:break;printf(n继续操作请输入,否则请按0退出:n);scanf(%d,&a);图1图2链表:#include stdio.h#include malloc.htypedef struct node int data; struct node *next;LNode,*LinkList;int len;/*-创建链式线性表-*/LinkList CreatLink() int x,count=0; LinkList p,q,h; h=NULL; p=(LinkList)malloc(sizeof(LNode); scanf(%d,&x); p-data=x; p-next=NULL; while(x!=0) count+; if(count=1)q=h=p;else q-next=p; q=p; p=(LinkList)malloc(sizeof(LNode); scanf(%d,&x); p-data=x; p-next=NULL; return h;/*-删除链式线性表的元素-*/LinkList del(LinkList h,int data)LinkList p1,p2;if(h=NULL)printf(n list null!n);return h;p1=h;while(data!=p1-data&p1-next!=NULL)p2=p1;p1=p1-next;if(data=p1-data)if(p1=h)h=p1-next;else p2-next=p1-next;printf(delete:%ldn,data);len=len-1;else printf(%ld not been found!n,data);return(h);/*-输出链式线性表的元素-*/void PrintLink(LNode *h) LNode *p; p=h; while(p!=NULL) printf(%d ,p-data);p=p-next; /*-计算链式线性表的长度-*/int LinkLen(LinkList h) LinkList p=h; int count=0; while(p!=NULL) count+;p=p-next; return count;/*-查找链式线性表中的元素-*/LinkList QueryLink(LinkList h,int x) LinkList q,p; q=p=h; while(p!=NULL) if(p-data=x)break;else q=p; p=p-next; if(p!=NULL)return q;elsereturn NULL;/*-向链式线性表插入元素-*/LinkList InsertLink(LinkList h,int i,int x) LinkList p,q; int j; p=(LinkList)malloc(sizeof(LNode); p-data=x; if(i=0) p-next=h;h=p; else q=h;j=1;while(q!=NULL & jnext;if(q!=NULL) p-next=q-next; q-next=p;elseprintf(no foundn); return h;void main()LinkList h,p;int x,a;printf(请按菜单进行操作!n);printf(*n);printf(按 1:创建链表n);printf(按 2:插入元素n);printf(按 3:链表长度n);printf(按 4:查找元素n);printf(按 5:删除元素n);printf(按 6:输出链表n);printf(按 0:退出运行n);printf(*n);printf(请选择操作:);scanf(%d,&a);while(a!=0) switch(a) case 1:printf(请输入:); h=CreatLink(); printf(创建链表成功!); break; case 2:printf(请输入要插入的元素:);scanf(%d,&x); h=InsertLink(h,1,x); break; case 3:len=LinkLen(h); printf(该链表的长度为:%d,len);break; case 4:printf(请输入要查找的元素:);scanf(%d,&x); p=QueryLink(h,x); if(p!=NULL) printf(find=%dn,p-next-data); else printf(no foundn)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论