好文档 - 专业文书写作范文服务资料分享网站

数据结构单链表实验报告 

天下 分享 时间: 加入收藏 我要投稿 点赞

v1.0 可编辑可修改 洛阳理工学院实验报告

系别 计算机系 班级 学号 姓名 实验日期 成绩 课程名称 实验名称 数据结构 链表的基本操作 实验目的: 熟悉掌握线性表链式存储结构,掌握与应用查找、插入、删除等基本操作算法,训练和提高结构化程序设计能力及程序调试能力。 实验条件: 计算机一台,Visual C++ 实验内容: 1. 问题描述 以单链表为存储结构实现以下基本操作: (1) (2) (3) 在第i个元素前插入一个新元素。 查找值为x的某个元素。若成功,给出x在表中的位置;不成功给出提示信息。 删除第i个元素,若成功,给出提示信息并显示被删元素的值;不成功给出失败的提示信息。 2. 数据结构类型定义 typedef struct LinkNode { int Value; struct LinkNode * Next; }Node,*LinkList; 3. 模块划分 (1)初始化链表:void InitList(LinkList * L); (2)创建链表:尾插法:int CreateFromTail(LinkList L); (3)在指定位置插入元素:int InsList(LinkList L,int i,int e); (4)在指定位置删除元素:int DelList(LinkList L,int i,int *e); 返回值说明:返回ERROR插入失败,返回OK插入成功; (5)按位置查找链表元素:int GetList(LinkList L,int i,int *e); 4. 详细设计 void init_linklist(LinkList *l)/*对单链表进行初始化*/{ 1

v1.0 可编辑可修改 } *l=(LinkList)malloc(sizeof(Node)); /*申请结点空间*/ (*l)->next=NULL; /*置为空表*/ void CreateFromHead(LinkList L) { */ } void CreateFromTail(LinkList L) { Node *r, *s; char c; int flag =1; /*设置一个标志,初值为1,当输入\时,flag为0,建r=L; /*r指针动态指向链表的当前表尾,以便于做尾插while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/ { c=getchar(); { } c=getchar(); if(c!='$') { } else flag=0; s=(Node*)malloc(sizeof(Node)); /*建立新结点s*/ s->data=c; s->next=L->next;/*将s结点插入表头*/ L->next=s; Node *s; char c; int flag=1; while(flag) /* flag初值为1,当输入\时,置flag为0,建表结束表结束*/ 入,其初值指向头结点*/ 2

v1.0 可编辑可修改 } if(c!='$') { } else { } flag=0; r->next=NULL; /*将最后一个结点的next链域置为空,表示链表s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; 的结束*/ } Node * Get (LinkList L, int i) /*在带头结点的单链表L中查找第i个结点,若找到(1≤i≤n),则返回该结点的存储位置; 否则返回NULL*/ { int j; Node *p; p=L; j=0; /*从头结点开始扫描*/ while ((p->next!=NULL)&&(jn */ else p=p->next; /* 扫描下一结点*/ j++; /* 已扫描结点计数器 */ } 3

v1.0 可编辑可修改 Node *Locate( LinkList L,ElemType key) /*在带头结点的单链表L中查找其结点值等于key的结点,若找到则返回该结点的位置p,否则返回NULL*/ { } int InsList(LinkList L,int i,ElemType e) /*在带头结点的单链表L中第i个位置插入值为e的新结点s*/ { Node *pre,*s; int k; pre=L; k=0; /*从\头\开始,查找第i-1个结点*/ while(pre!=NULL&&knext; k=k+1; /*查找第i-1结点*/ Node *p; p=L->next; /*从表中第一个结点开始 */ while (p!=NULL) { } return p; if (p->data!=key) p=p->next; break; /*找到结点值=key时退出循环 */ else 指向第i-1个*/ } if(!pre) /*如当前位置pre为空表已找完还未数到第i个,说明插入{ printf(\插入位置不合理!\ return ERROR; 位置不合理*/ 4

v1.0 可编辑可修改 } } s=(Node*)malloc(sizeof(Node)); /*申请一个新的结点S */ s->data=e; /*值e置入s的数据域*/ s->next=pre->next; pre->next=s; return OK; /*修改指针,完成插入操作*/ int DelList(LinkList L,int i,ElemType *e) /*在带头结点的单链表L中删除第i个元素,并将删除的元素保存到变量*e中*/ { } Node *pre,*r; int k; pre=L; k=0; while(pre->next!=NULL && knext; k=k+1; /*查找第i-1个结点*/ p指向它*/ } if(!(pre->next)) /* 即while循环是因为p->next=NULL或i<1而跳{ } r=pre->next; pre->next=pre->next->next; /*修改指针,删除结点r*/ *e = r->data; free(r); /*释放被删除的结点所占的内存空间*/ printf(\成功删除结点!\ return OK; printf(\删除结点的位置i不合理!\ return ERROR; 出的,而是因为没有找到合法的前驱位置,说明删除位置i不合法。*/ 5

数据结构单链表实验报告 

v1.0可编辑可修改洛阳理工学院实验报告系别计算机系班级学号姓名实验日期成绩课程名称实验名称数据结构链表的基本操作实验目的:熟悉掌握线性表链式存储结构,掌握与应用查找、插入、删除等基本操作算法,训练和提高结构化程序设计能力及程序调试能力。实验条件:计算机一台,VisualC++实验内容:1.问题描述以单链表为存储结构实现以
推荐度:
点击下载文档文档为doc格式
3mf6e965ho1symv1jox557eja0pqs3006ph
领取福利

微信扫码领取福利

微信扫码分享