免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 链表的基本操作学号:0700710319 姓名:梁浩然 实验日期:2009年4月25日1、 实验目的(1) 学会单链表结点的定义(2) 掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。(3) 加深对链表的理解,逐步培养解决实际问题的编程能力。2、 实验要求(1) 熟练掌握链表的存储结构及其基本操作。(2) 理解所给出的算法,掌握链表在实际中的应用。(3) 将上机程序调试通过,并能独立完成一至两个拓展题目。3、 实验内容从键盘输入数据,创建一个初始链表。通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对有关算法的理解。4、 实验方法第一步:定义单链表的存储结构。第二步:编写单链表操作的具体函数定义。第三步:使用定义的单链表并调用单链表的一些操作,实现具体运算。具体函数的定义有:1) insert(L,i,x)在单链表的第i个元素之前插入一个新元素x.2) deletet(L,i) 删除单链表的第i个元素。3) listprint(L) 输出单链表。5、实验步骤所给实例程序经调试修改如下:#include stdio.h#include malloc.h /*包含动态分配内存函数*/#define NULL 0#define TRUE 1#define FALSE 0typedef int elemtype;typedef struct node /*链表结点类型定义*/ elemtype data; /*结点数据域*/ struct node *next; /*结点的指针域*/ linklist;linklist *creatlist() /*创建链表函数-以按下任意建开始创建,以输入字符?表示结束标志*/ char ch; int x; linklist *head,*r,*p; p=(linklist*)malloc(sizeof(linklist); head=p; p-next=NULL; r=p; ch=getchar(); while(ch!=?) scanf(%d,&x); p=(linklist*)malloc(sizeof(linklist); p-data=x; p-next=NULL; r-next=p; r=r-next; ch=getchar(); return (head); int locate(linklist *head,elemtype k) /*定位检索函数-如链表中存在值为k的结点,则返回真,否则返回假*/ linklist *s; s=head-next; while(s!=NULL) if(s-data!=k)s=s-next; else return TRUE; return FALSE; void insert(linklist *head,int i,elemtype x) /*在链表head的第i个位置插入元素x*/ linklist *s,*p; int j; p=head; j=0; while(p-next&jnext;j+; if(!p|ji-1) printf(error!); s=(linklist *)malloc(sizeof(linklist); if(!s) printf(overflow!); s-data=x; s-next=p-next; p-next=s; void delete1(linklist *head,int i) /*删除链表的第i个结点*/ int j=0; linklist *p,*s,*q; p=head;j=0; while(p-next!=NULL)&(jnext; j+; if(p-next!=NULL) q=p-next; p-next=p-next-next; free(q); else printf(illegal delete position,delete failed!); void print(linklist *head) /*打印出链表head中各个结点的值*/ linklist *p; p=head-next; while(p!=NULL) printf(%d ,p-data); p=p-next; printf(n); void main() /*主函数*/ linklist *head; /*定义指向链表的指针head*/ int x; int i,j; printf(please input the initial node and start by any key(?execpt)end with ?n); head=creatlist(); printf(we have created a linklist as follow:n); print(head); printf(now start search,please input the search value:); scanf(%d,&x); printf(n); if(locate(head,x) printf(exsist!n); else printf(not exsist!n); printf(start insert operation,please input insert position:); scanf(%d,&i); insert(head,i,x); printf(after insertion:n); print(head); printf(now start delete operation,input the delete position please:); scanf(%d,&j); delete1(head,j); printf(after deletion:n); print(head); 6、 思考题调试好上述程序,拓展内容:(1) 定义一个逆置函数diverse(L),把链表进行逆置。在主程序中调用该函数,分析操作结果。#include stdio.h#include malloc.h /*包含动态分配内存函数*/#define NULL 0#define TRUE 1#define FALSE 0typedef int elemtype;typedef struct node /*链表结点类型定义*/ elemtype data; /*结点数据域*/ struct node *next; /*结点的指针域*/ linklist;linklist *creatlist()/*创建链表函数-以按下任意建开始创建,以输入字符?表示结束标志*/ char ch; int x; linklist *head,*r,*p; p=(linklist*)malloc(sizeof(linklist); head=p; p-next=NULL; r=p; ch=getchar(); while(ch!=?) scanf(%d,&x); p=(linklist*)malloc(sizeof(linklist); p-data=x; p-next=NULL; r-next=p; r=r-next; ch=getchar(); return (head); void diverse(linklist *L) / 本算法将带头结点的单链表L逆置。 /算法思想是先将头结点从表上摘下,然后从第一个元素结点开始,依次前插入以L为头结点的链表中。 linklist *p=L-next,*s; / p为工作指针,指向当前元素,s为p的后继指针 L-next=NULL; /头结点摘下,指针域置空。算法中头指针L始终不变 while (p) s=p-next; / 保留后继结点的指针 p-next=L-next; / 逆置 L-next=p; p=s; / 将p指向下个待逆置结点 / 算法结束void print(linklist *head) /*打印出链表head中各个结点的值*/ linklist *p; p=head-next; while(p!=NULL) printf(%d ,p-data); p=p-next; printf(n); void main() linklist *head; /*定义指向链表的指针head*/ head=creatlist(); print(head); /打印出链表head中各结点的值 diverse(head); print(head); /打印出逆置后链表head中各结点的值运行结果如下:(2) 定义一个函数delsame(L),把链表中重复的元素删除掉,只保留一个。在主程序中调用该函数,分析操作结果。delsame(L)函数如下,其余部分的定义与函数与上题相同,在main函数中调用delsame(L)。void delsame(linklist *L) /*删除相同的元素*/ node *p,*q; int e; p=L-next; while(p!=NULL) q=p; e=p-data; p=p-next; while(p!=NULL) if(e=p-data) /*将相同的元素赋值为0 在下面判断如果元素值为0 释放这个接点*/ p-data=0; p=p-next; p=q; p=p-next; p=L;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47575-2026无人驾驶航空器飞行管理与服务信息交互规范
- 2026 甘肃省陇南市电力电缆作业证理论考试参考题库-含答案
- 2026 福建桥式起重机Q2证考试参考题库-含答案
- 2023年四川省南充市中考数学真题【答案】
- 校车消毒相关试题及答案解析
- 学前乐理模拟试题及答案大全
- 编程逻辑面试试题及参考解析
- 2026广西壮族自治区残疾人劳动就业指导中心招聘行政综合岗人员笔试模拟试题及答案详解
- 2026年绥宁县网格员招聘考试备考题库及答案解析
- 2026年嘉荫县网格员招聘考试备考试题及答案解析
- 2026-2027学年第一学期(秋季)初中教导处工作计划
- 2025年法院司法辅助人员真题附参考答案详解
- 第三章 3D服装设计基础应用(课件)-《服装设计与虚拟仿真表现》同步教学(纺织出版社)
- 人教版小学三年级数学下册第四单元《图形的面积》单元整体教学设计
- 2026年秋季学期小学四年级科学(青岛版五四制上册)教学计划含进度表
- 2026宁夏中卫市海原县属国有企业领导人员招聘9人考试参考题库及答案详解
- 2026年统编版(2024)一年级道德与法治上册全册教案(教学设计)新版
- 2026新版三年级上册语文暑假课文预习完整版
- 采购部门供应商准入与比价评审执行流程供应商评分表询价比价表评审纪要与履约跟踪台账
- 2026年人教A版高一下学期数学期末模拟卷(含答案解析)
- 钢筋工安全教育培训课件
评论
0/150
提交评论