已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京信息工程大学数据结构实验(实习)报告实验(实习)名称 顺序表、单链表 实验(实习)日期 2015-10-11 得分 指导教师 顾韵华 系 计软院 专业 计科 年级 2014级 班次 2 姓名 一、 实验目的1、掌握采用顺序表、单链表二种存储结构实现线性表的归并运算。二、 实验内容1、输入两个顺序表A和B的元素值(整数),元素递增有序,编写程序将A和B归并成一个按元素值递增有序的顺序表C。分别输出顺序表A、B和C所有元素的值。 2、输入两个单链表A和B的元素值(整数),其表中元素递增有序,编写程序将A和B归并成一个按元素值递增有序的单链表C。分别输出单链表A、B和C所有结点的值。三、 数据结构设计和实现1、 顺序表数据结构设计和实现#include #include #include #include /常量定义#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2#define True 1#define False 0/函数返回值类型定义typedef int Status;/表节点数据类型定义typedef int ElemType;/顺序表类型定义typedef structElemType *elem;int length;int listsize; SqList;/顺序表各操作声明Status InitList_Sq(SqList &L);Status DetroyList_Sq(SqList &L);Status ClearList_Sq(SqList &L);int ListEmpty_Sq(SqList L);int ListLength_Sq(SqList L);Status GetElem_Sq(SqList L,int i,ElemType &e);Status ListInsert_Sq(SqList &L,int i,ElemType e);Status ListDelete_Sq(SqList &L,int i,ElemType &e);void PrintList_Sq(SqList L);void MergeList(SqList La,SqList Lb,SqList &Lc);#includelink.h#includeiostream.hStatus InitList_Sq(SqList &L)L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType);if (!L.elem) exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;Status DetroyList_Sq(SqList &L)if (L.elem) free(L.elem);return OK;Status ClearList_Sq(SqList &L)if (L.elem)L.length=0;L.listsize=0;return OK;int ListEmpty_Sq(SqList L)return (L.length=0);int ListLength_Sq(SqList L)coutL.length;return 0;Status GetElem_Sq(SqList L,int i,ElemType &e)if (i=L.length)return ERROR;e=L.elemi-1;return OK;Status ListInsert_Sq(SqList &L,int i,ElemType e)ElemType *newbase,*p,*q; if (iL.length+1)return ERROR;if (L.length=L.listsize)newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType); if (!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1);for (p=&L.elemL.length-1;p=q;p-)*(p+1)=*p;*q=e;L.length+;return OK;Status ListDelete_Sq(SqList &L,int i,ElemType &e)ElemType *p,*q; if (iL.length)return ERROR;p=&(L.elemi-1);e=*p;q=L.elem+L.length-1;for (+p;pq;+p)*(p-1)=*p;L.length-;return OK;void PrintList_Sq(SqList L)int i;if (L.length=0)cout该表为空endl;else for (i=0;iL.length;i+) coutL.elemi ;#include link.h#includeiostream.hvoid MergeList(SqList La,SqList Lb,SqList &Lc)int *pa;pa=La.elem;int *pb;pb=Lb.elem;Lc.listsize=Lc.length=La.length+Lb.length;int *pc;pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType);if(!Lc.elem)exit(OVERFLOW);/存储分配失败int *pa_last;pa_last=La.elem+La.length-1;int *pb_last;pb_last=Lb.elem+Lb.length-1;while(pa=pa_last&pb=pb_last)/归并if(*pa=*pb) *pc+=*pa+;else *pc+=*pb+;while(pa=pa_last) *pc+=*pa+;while(pb=pa_last) *pc+=*pb+;/MergeList_Lint main()SqList L1,L2,L3;ElemType e;int i;InitList_Sq(L1); /构造空的单链表L1InitList_Sq(L2); /构造空的单链表L2printf(请输入表L1元素值,共5个n);for (i=0;i5;i+)scanf(%d,&e);ListInsert_Sq(L1,i+1,e); /向表中插入用户输入的元素值 printf(请输入表L2元素值,共3个n);for (i=0;inext=NULL; /头节点的指针域指向NULLif(!L) return ERROR;return OK;/InitListStatus DestroyList(LinkList &L) /销毁链表LLinkList p,r;p=L-next; r=p-next;while(p!=NULL)free(p);p=r;r=p-next;free(L);return OK;/DestroyListStatus ClearList(LinkList &L) /将链表L重置为空表LinkList p,r;p=L-next; r=p-next;while(p!=NULL)free(p);p=r;r=p-next;L-next=NULL;return OK;/ClearListint ListEmpty(LinkList L) /判断L是否为空表return (L-next=NULL);/ListEmptyint ListLength(LinkList L) /返回L中元素结点个数LinkList p; p=L;int i=0;while(p-next!=NULL)p=p-next;i+;return i;/ListLengthStatus GetElem(LinkList L,int i,ElemType &e) /用e返回L中第i个数据元素的值LinkList p=L;int j=0;while(p!=NULL&jnext;j+;if(p=NULL|ji-1) return ERROR;e=p-data;return OK;/GetElemint LocateElem(LinkList L,ElemType e) /判断e是否存在于L中LinkList p=L;int i=0;while(p-next!=NULL)p=p-next;i+;if(p-data=e)return i;return 0;/LocateElemStatus ListInsert(LinkList &L,int i,ElemType e) /在L中第i个位置之前插入数据元素eLinkList p=L,s;int j=0;while(p!=NULL&jnext;j+;if(p=NULL|ji-1) return ERROR;s=(LinkList)malloc(sizeof(LNode);s-data=e;s-next=p-next;p-next=s;return OK;/ListInsertStatus ListDelete(LinkList &L,int i,ElemType &e) /删除L中第i个数据元素,并用e返回其值LinkList p=L,q;int j=0;while(p-next!=NULL&jnext;j+;if(p-next=NULL|ji-1) return ERROR;q=p-next;p-next=q-next;e=q-data;free(q);return OK;/ListDeletevoid PrintList(LinkList L)LinkList p=L-next;while(p!=NULL)printf(%d ,p-data);p=p-next;printf(n);/PrintListvoid DeleteElem(LinkList &L,ElemType e) /删除线性表中所有值为e的结点LinkList p=L,q;while(p-next!=NULL)q=p-next;if(q-data=e)p-next=q-next;free(q);elsep=p-next;/DeleteElemvoid MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) /链表的二路归并LinkList pa,pb,pc;pa=La-next; pb=Lb-next;Lc=pc=La;while(pa&pb)if(pa-datadata)pc-next=pa;pc=pa;pa=pa-next;elsepc-next=pb;pc=pb;pb=pb-next;pc-next=pa?pa:pb;free(Lb);/MergeList四、程序调试1、顺序表的实现:采用多文件结构,创建程序的过程为:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026北京市顺义区空港社区卫生服务中心第二批编外人员招聘1人笔试参考题库及答案解析
- 2026贵州遵义仁怀市公安局社会招聘警务辅助人员20人考试备考试题及答案解析
- 成都产业投资集团有限公司2026“蓉漂人才荟”城市行4月社会招聘笔试备考试题及答案解析
- 2026重庆大学自动化学院机器人与智能系统研究所劳务派遣助理招聘1人笔试备考题库及答案解析
- 2026年乐平市公开招聘公立医院编外卫生专业技术人员补充笔试参考题库及答案解析
- 2026年2026徐涛优题库导论答案
- 招若干!青海民族大学2026年公开招聘博士(第一批)笔试参考题库及答案解析
- 2026江西赣州市大余县选调事业单位人员61人笔试模拟试题及答案解析
- 2026福建泉州丰泽国有投资集团有限公司劳务派遣人员招聘6人笔试参考题库及答案解析
- 2026北京航空航天大学可靠性与系统工程学院聘用编科研助理F岗招聘1人考试参考题库及答案解析
- 河北水利发展集团有限公司招聘考试真题2024
- 财务岗位招聘笔试题及解答(某大型国企)2025年附答案
- 国开2025年秋《农业推广》形成性考核1-3答案
- 艾媒咨询2025年中国新式茶饮大数据研究及消费行为调查数据
- 农产品经纪人职业技能考核试卷及答案
- 2024年伊犁州直法院机关招聘聘用制书记员考试真题
- 废旧光伏组件资源化利用建设项目可行性研究报告写作模板-备案审批
- 基于用户体验的在线教育平台课程结构优化研究
- 胃肠息肉术后护理课件
- 2025年综合类-病案信息技术(士)-病案信息技术相关专业知识历年真题摘选带答案(5卷单选题100道)
- DB44∕T 2623-2025 道路工程高韧超薄磨耗层技术规范
评论
0/150
提交评论