实验四 双向链表重点讲义_第1页
实验四 双向链表重点讲义_第2页
实验四 双向链表重点讲义_第3页
实验四 双向链表重点讲义_第4页
实验四 双向链表重点讲义_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、 实验名称 :实验四 双向或循环链表的基本操作一、实验项目名称:双向或循环链表的基本操作二、实验目的1)通过实验理解双向链表或循环链表的结构。 2)通过实验掌握双向链表或循环链表的基本操作。三、实验基本原理 1、数据结构 2、算法思想 1.构思:双向循环链表的创建建立在双向链表上,所以建立双向循环表每个结点都有三个属性:数据域、上个结点、下个结点,其中第一个结点的上一个结点是最后一个结点,最后一个结点的下一个结点就是第一个结点,所以就构成了双向循环链表。双链表的单元类型定义Type struct DuLNode Elemtype data; Struct DuLNode *prior;/建立表

2、头结点Struct DuLNode *next;/建立表尾结点 DuLNode,*DuLinkList; 3、算法描述 建立一个双链表,输入元素。由p和s两个指针来存放元素。以0判断是否结束,如果不为0 ,则继续,为0则截止。 s->data=e; s->next=p->next; s->prior=p; p->next->prior=s; p->next=s; p=s; 查找元素:首先判断位置是否合法(p->data!=e&& p->next!=head)若合法进行查找运算。需要引用DuLinkList,(DuLinkLi

3、st &L)输入要查找的元素的位置,判断双链表中是否有该元素,如果是则输出该元素,如果没有,则提示没有该元素。插入元素:判断位置是否合法(i<1|i>L.Length),若合法进行查插入运算。需要引用DuLinkList,(DuLinkList &L)输入要插入的元素及其位置,插入数据然后输出数据。删除元素:判断位置是否合法(i<1|i>L.Length),若合法进行查删除运算。输入要插入的元素及其位置,删除该数据。本程序实现双链表的创建、查找、插入、删除、显示、菜单为主的六个函数组成。四、主要仪器设备及耗材 电脑运行环境:visual C+6.05、

4、实验步骤(1) 打开visual C+,新建工程console application工程,新建文件C+ source file。(2) 输入自己的程序代码(3) 如果有报错则修改程序。无则组建调试六、实验数据及处理结果 1、程序清单#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1#define ERROR 0#define OVERFLOW -2typedef struct

5、 DuLnodeint data; Struct DuLNode *prior;/建立表头结点 Struct DuLNode *next;/建立表尾结点int L;DuLinkList;DuLinkList *ahead;int DuLinkListCreate(DuLinkList &L) DuLinkList *p,*s; int x; ahead=(DuLinkList*)malloc(sizeof(DuLinkList); ahead->data=-1; ahead->next=ahead; ahead->prior=ahead; p=ahead; L.Len

6、gth=0; printf("请输入元素,输入0结束n"); scanf("%d",&x); while(x!=0) s=(DuLinkList*)malloc(sizeof(DuLinkList); s->data=x; s->next=p->next; s->prior=p; p->next->prior=s; p->next=s; p=s; scanf("%d",&x); L.Length+; return OK;void DuLinkListDisplay(DuLink

7、List &L)DuLinkList * p=ahead->next;while(p!=ahead)printf("%d ",p->data);p=p->next;printf("n");int DuLinkListLocate(DuLinkList &L,int e) /查找元素 DuLinkList * p=ahead->next; int i=1;if(p=NULL) return ERROR; while(p->data!=e&& p->next!=ahead) p=p->

8、next; i+; if(p->data=e) printf("查找的位置是:%d n",i); else printf("并没有这个元素n"); return OK;int DuLinkListInsert(DuLinkList &L,int i,int e) /插入元素 int j;j=0;DuLinkList *p=ahead->next,*s;while(p->next!=ahead)&&(j<i-1) p=p->next;j+;if(i>0)&&(j=i-1) s=(D

9、uLinkList*)malloc(sizeof(DuLinkList);s->data=e;s->prior=p->prior;p->prior->next=s;s->next=p;p->prior=s; DuLinkListDisplay(L);return OK;int DuinkListDelet(DuLinkList &L,int i) /删除元素 int e,j=0; DuLinkList *p=head->next;while(p->next!=ahead)&&(j<i-1) /找到第i个结点p=

10、p->next;j+; if(i>0)&&(j=i)e=p->data;p->prior->next=p->next;p->next->prior=p->prior;free(p);Display_Dul(L);return OK;int scan() int a; do printf("1. 输入元素 n"); printf("2. 查找 n"); printf("3. 插入n"); printf("4. 删除n"); printf("

11、;5. 显示数据n"); printf("6. 退出程序n"); printf("输入你想要的操作:"); scanf("%d",&a); while(a<0&&a>6); return (a);int main() DuLinkList L;for(;) / 无限循环 switch(scan() int e,i; case 1:DuLinkListCreate(L); break; case 2:printf("请输入你想要查找的元素:"); scanf("

12、%d",&e); DuLinklistLocate(L,e); break; case 3:printf("请输入要插入的数的位置:"); scanf("%d",&i); if(i<1|i>L.L) printf("输入不合法"); break; printf("请输入你要插入的元素:"); scanf("%d",&e); DuLinkListInsert(L,i,e); break; case 4:printf("请输入你要删除的位置:"); scanf("%d",&i); if(i<1|i>L.L) printf("输入不合法n"); break; DuLinkListDelet(L,i); break; cas

温馨提示

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

评论

0/150

提交评论