1、数据结构课后作业 23 实 验 报 告(示例)实验名称:数据结构与算法实验学期:2012-2013(1)实验班级:11物联姓名:所属学院:计算机学院指导教师: 二一二 年 九月 十二 日广东技术师范学院实验报告(示例)实验内容:线性表及其操作实验目的:实验地点:工业中心202实验序号:2预习内容:操作情况实验中出现的主要问题和解决情况未能在实验前对程序进行文本编辑,使得实验课时间主要花在程序编辑上,运行调试时间十分紧张,对程序算法整体的认识和功能分析没有时间进行,只是停留在将书上给定程序上机运行。后面的实验需要做好实验前程序代码的预写准备,以提高效率。结果:运行正常,输出正确,达到实验目的1
2、操作步骤进入VC+6.0:Windows开始程序 Microsoft Visual 6.0利用VC+6.0首先定义一个工程文件新建选择类型win32 Console Application选择保存路径和文件名确定选择建立空工程文件在该工程文件中加入C+源文件新建选择文件选择C源文件文件名确定编辑该源文件(输入程序代码)编译、连接(修改与调式)运行程序在Microsoft Visual 6.0 中选择组建 编译/组建(连接)/运行2算法描述:(包含函数:)/*文件名:algo2-3.cpp*/#include #include typedef char ElemType;typedef stru
3、ct DNode /*定义双链表结点类型*/ ElemType data; struct DNode *prior; /*指向前驱结点*/ struct DNode *next; /*指向后继结点*/ DLinkList;void InitList(DLinkList *&L) L=(DLinkList *)malloc(sizeof(DLinkList); /*创建头结点*/ L-prior=L-next=NULL;void DestroyList(DLinkList *&L) DLinkList *p=L,*q=p-next; while (q!=NULL) free(p); p=q; q
4、=p-next; free(p);int ListEmpty(DLinkList *L) return(L-next=NULL);int ListLength(DLinkList *L) DLinkList *p=L;int i=0; while (p-next!=NULL) i+; p=p-next; return(i);void DispList(DLinkList *L) DLinkList *p=L-next; while (p!=NULL) printf(%c,p-data); p=p-next; printf(n);int GetElem(DLinkList *L,int i,El
5、emType &e) int j=0; DLinkList *p=L; while (jnext; if (p=NULL) return 0; else e=p-data; return 1; int LocateElem(DLinkList *L,ElemType e) int n=1; DLinkList *p=L-next; while (p!=NULL & p-data!=e) n+; p=p-next; if (p=NULL) return(0); else return(n);int ListInsert(DLinkList *&L,int i,ElemType e) int j=
6、0; DLinkList *p=L,*s; while (jnext; if (p=NULL) /*未找到第i-1个结点*/ return 0; else /*找到第i-1个结点*p*/ s=(DLinkList *)malloc(sizeof(DLinkList); /*创建新结点*s*/ s-data=e; s-next=p-next; /*将*s插入到*p之后*/ if (p-next!=NULL) p-next-prior=s; s-prior=p; p-next=s; return 1; int ListDelete(DLinkList *&L,int i,ElemType &e)
7、int j=0; DLinkList *p=L,*q; while (jnext; if (p=NULL) /*未找到第i-1个结点*/ return 0; else /*找到第i-1个结点*p*/ q=p-next; /*q指向要删除的结点*/ if (q=NULL) return 0; /*不存在第i个结点*/ p-next=q-next; /*从双链表中删除*q结点*/ if (p-next!=NULL) p-next-prior=p; free(q); /*释放*q结点*/ return 1; void Sort(DLinkList *&head) /*双链表元素排序*/ DLinkL
8、ist *p=head-next,*q,*r; if (p!=NULL) /*若原双链表中有一个或以上的数据结点*/ r=p-next; /*r保存*p结点后继结点的指针*/ p-next=NULL; /*构造只含一个数据结点的有序表*/ p=r; while (p!=NULL) r=p-next; /*r保存*p结点后继结点的指针*/ q=head; while (q-next!=NULL & q-next-datadata) /*在有序表中找插入*p的前驱结点*q*/ q=q-next; p-next=q-next; /*将*p插入到*q之后*/ if (q-next!=NULL) q-n
9、ext-prior=p; q-next=p; p-prior=q; p=r; void CreateListR(DLinkList *&L,ElemType a,int n)/由含有n个元素的数组a创建带头结点的双链表L DLinkList *s,*r;int i; L=(DLinkList*)malloc(sizeof(DLinkList); /创建头结点 L-prior =L-next =NULL; r=L;/r始终指向尾结点,开始时指向头结点 for (i=0;idata=ai; r-next =s;s-prior =r;/将*s插入*r之后 r=s;/r指向*s结点 r-next =N
10、ULL;/尾结点next域置为NULLvoid main() DLinkList *h;char a5,e;int i; printf(1)初始化线性表h:n); InitList(h); printf(2)一次采用尾插法插入啊a,b,c,d,e元素n); for(i=0;i5;i+) scanf(%c,&ai); CreateListR(h,a,5); printf(3)输入双链表h:); DispList(h);printf(n); printf(4)输出双链表h长度%dn,ListLength(h); printf(5)判断双链表h是否为空:); if(ListEmpty(h) prin
11、tf(空表); else printf(不为空); printf(n); GetElem(h,3,e); printf(6)输出双链表h的第三个元素:%cn,e); printf(7)输出元素a的位置%dn,LocateElem(h,a); printf(8)在第四个元素位置上插入f元素n); ListInsert(h,4,f); printf(9)输出双链表h:); DispList(h);printf(n); printf(10)删除h的第三个元素n); ListDelete(h,3,e); printf(11)输出双链表h:); DispList(h);printf(n); printf(12)释放双链表hn);3.运行结果:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1