链表基础操作(含菜单选择)
北京邮电大学 数据结构 实验一 带头结点的单链表构造
数据结构实验报告
实验名称:实验1——单链表的构造
学生姓名:XXXXNB
班级:XXXX
班内序号:
学号:XXXX
日期:XXXXX
1.实验要求
根据线性表的抽象数据类型的定义,完成带头结点的单链表的基本功能。
单链表的基本功能:
1、构造:使用头插法、尾插法两种方法
2、插入:要求建立的链表按照关键字从小到大有序
3、删除
4、查找
5、获取链表长度
6、销毁
7、其他:可自行定义
编写测试main()函数测试线性表的正确性。
2.程序分
编程完成单链表的一般性功能如单链表的构造:使用头插法、尾插法两种方法插入:要求建立的链表按照关键字从小到大有序,删除,查找,获取链表长度,销毁用《数据结构》中的相关思想结合C++语言基本知识编写一个单链表结构。本程序为使用方便,几乎不用特殊的命令,只需按提示输入即可,适合更多的用户使用。
2.1 存储结构
单链表的存储结构:
2.2 关键算法分析
1.头插法
自然语言描述:a.在堆中建立新结点
b.将a[i]写入到新结点的数据域
c.修改新结点的指针域
d.修改头结点的指针域,将新结点加入链表中
//在构建之初为了链表的美观性构造,进行了排序
代码描述:
//头插法构造函数
template<class T>
LinkList<T>::LinkList(T a[], int n)
{
for (int i = n - 1; i >= 1; i--)//冒泡排序,对数组进行从小到大排序{
for (int j = 0; j < i; j++)
{
if (a[j]>a[j + 1])
实验指导手册
《数据结构》实验指导手册
计算机教研室
1.实验教学的目的:通过实验,加深对算法与数据结构基本知识的理解,掌握数据结构的理论和设计技术及其使用,培养学生数据结构的设计、开发能力。
2.实验教学的要求:学生每次实验前必须根据实验指导手册,设计出实验方案(程序和实验步骤);在实验过程中要求独立进行程序调试和排错,必须学会使用在线帮助解决实验中遇到的问题,必须应用理论知识分析问题、解决问题。
3.实验内容:
实验1:VC6的使用
一、实验目的
理解和掌握如何使用Visual C++环境编写C/C++程序。
二、实验环境
装有Visual C++的计算机。
本次实验共计4学时。
三、实验内容
1、熟悉VC6环境
掌握如何创建控制台应用程序。
掌握一些常用快捷键,例如编译F7,运行Ctrl+F5,调试运行F5,单步运行F10/F11,设置断点F9,格式化代码Alt+F8。
2、掌握如何编译程序
理解编译过程中的错误信息,并掌握如何排错。
3、掌握如何调试程序
掌握如何通过设置断点来单步调试程序,如何查看当前变量的值。
4、实验题:
完成实验教材的实验题、、。要求:
实现该实验结果。通过该实验题,熟悉VC6环境下的程序编写、编译、调试。
一、实验目的
(1)掌握顺序表的各种基本运算的实现。
(2)能够利用基本运算进行顺序表的操作。
二、实验环境
装有Visual C++的计算机。
本次实验共计2学时。
三、实验内容
1、顺序表基本运算
实现顺序表的各种基本运算;并在此基础上设计一个主程序,完成如下功能:(1)初始化顺序表L(元素类型为char型)
(2)依次采用尾插法插入a, b, c, d, e元素
实验一 线性表的基本操作实现及其应用
实验一线性表的基本操作实现及其应用
一、实验目的
1、熟练掌握线性表的基本操作在两种存储结构上的实现。
2、会用线性链表解决简单的实际问题。
二、实验内容
题目一、该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点为结构类型,结点值为整型。单链表操作的选择以菜单形式出现,如下所示:
please input the operation:
1.初始化
2.清空
3.求链表长度
4.检查链表是否为空
5.检查链表是否为满
6.遍历链表(设为输出元素)
7.从链表中查找元素
8.从链表中查找与给定元素值相同的元素在表中的位置
9.向链表中插入元素 10. 从链表中删除元素
其他键退出。。。。。
其中黑体部分必做
题目二、约瑟夫环问题:
设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
struct node
(一)
1.进入选择界面后,先选择7,进行插入:
2.选择4,进行遍历,结果为:
3.选择2,得出当前链表长度.
4.选择3,得出当前链表为.
5.选择分别选择5、6进行测试.
6.选择8,分别按位置和元素值删除.
7.选择9,或非1-8的字符,程序结束.
数据结构课程设计-单链表
目录
1 选题背景 (1)
2 方案与论证 (1)
2。1 链表的概念和作用 (1)
2。3 算法的设计思想 (2)
2。4 相关图例 (3)
2.4.1 单链表的结点结构 (3)
2.4。2 算法流程图 (3)
3 实验结果 (4)
3.1 链表的建立 (4)
3.2 单链表的插入 (4)
3.3 单链表的输出 (5)
3.4 查找元素 (5)
3。5 单链表的删除 (5)
3。6 显示链表中的元素个数(计数) (5)
4 结果分析 (6)
4。1 单链表的结构 (6)
4。2 单链表的操作特点 (6)
4。2。1 顺链操作技术 (6)
4.2。2 指针保留技术 (6)
4。3 链表处理中的相关技术 (6)
5 设计体会及今后的改进意见 (6)
参考文献 (8)
附录代码: (8)
1 选题背景
陈火旺院士把计算机60多年的发展成就概括为五个“一”:开辟一个新时代-—--信息时代,形成一个新产业-—-—信息产业,产生一个新科学—---计算机科学与技术,开创一种新的科研方法-—--计算方法,开辟一种新文化---—计算机文化,这一概括深刻影响了计算机对社会发展所产生的广泛而深远的影响。
数据结构和算法是计算机求解问题过程的两大基石。著名的计算机科学家P.Wegner指出,“在工业革命中其核心作用的是能量,而在计算机革命中其核心作用的是信息”.计算机科学就是“一种关于信息结构转换的科学”.信息结构(数据结构)是计算机科学研究的基本课题,数据结构又是算法研究的基础。
2 方案与论证
2。1 链表的概念和作用
链表是一种链式存储结构,链表属于线性表,采用链式存储结构,也是常用的动态存储方法。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
数据结构课程设计实验报告 完整版
第一章链表的应用
线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。
1.1设计要求
本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。
程序运行后,给出6个菜单项的内容和输入提示:
1.通讯录链表的建立
2. 通讯者结点的插入
3. 通讯者结点的查询
4. 通讯者结点的删除
5. 通讯录链表的输出
0. 退出管理系统
请选择0—5:
1.2设计分析
1.2.1主控菜单函数设计分析
1.实现循环和功能选择
首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。使用for循环实现重复选择,并在主函数main()中实现。
实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。
2.得到sn的合理值
如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。
数据结构-单链表基本操作实现(含全部代码)
数据结构-单链表基本操作实现(含全部代码)
今天是单链表的实现,主要实现函数如下:
InitList(LinkList &L) 参数:单链表L 功能:初始化时间复杂度 O(1)
ListLength(LinkList L) 参数:单链表L 功能:获得单链表长度时间复杂度O(n)
ListInsert(LinkList &L,int i,ElemType e) 参数:单链表L,位置i,元素e 功能:位置i后插时间复杂度O(n)[加⼊了查找]
若已知指针p指向的后插 O(1)
ListDelete(LinkList &L,int i) 参数:单链表L,位置i 功能:删除位置i元素时间复杂度O(n)[加⼊了查找]
若已知p指针指向的删除最好是O(1),因为可以与后继结点交换数据域,然后删除后继结点。
最坏是O(n),即从头查找p之前的结点,然后删除p所指结点
LocateElem(LinkList L,ElemType e) 参数:单链表L,元素e 功能:查找第⼀个等于e的元素,返回指针时间复杂度O(n)代码:
/*
Project: single linkeed list (数据结构单链表)
Date: 2018/09/14
Author: Frank Yu
InitList(LinkList &L) 参数:单链表L 功能:初始化时间复杂度 O(1)
ListLength(LinkList L) 参数:单链表L 功能:获得单链表长度时间复杂度O(n)
ListInsert(LinkList &L,int i,ElemType e) 参数:单链表L,位置i,元素e 功能:位置i后插时间复杂度O(n)[加⼊了查找]
实验四双向链表
实验名称:实验四双向或循环链表的基本操作
一、实验项目名称:双向或循环链表的基本操作
二、实验目的
1)通过实验理解双向链表或循环链表的结构。
2)通过实验掌握双向链表或循环链表的基本操作。
三、实验基本原理
1、数据结构
2、算法思想
1.构思:双向循环链表的创建建立在双向链表上,所以建立双向循环表每个结点都有三个属性:数据域、上个结点、下个结点,其中第一个结点的上一个结点是最后一个结点,最后一个结点的下一个结点就是第一个结点,所以就构成了双向循环链表。
双链表的单元类型定义
Type struct DuLNode
{
Elemtype data;
Struct DuLNode *prior;//建立表头结点
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,(DuLinkList &L)输入要查找的元素的位置,判断双链表中是否有该元素,如果是则输出该元素,如果没有,则提示没有该元素。
③插入元素:判断位置是否合法(i<1||i>L.Length),若合法进行查插入运算。需要引用DuLinkList,(DuLinkList &L)输入要插入的元素及其位置,插入数据然后输出数据。
算法与数据结构实验报告
2015-2016学年第二学期《算法与数据结构》课程实验报告
专业软件工程
学生姓名成晓伟
班级软件141
学号1410075094
实验学时16
实验教师徐秀芳
信息工程学院
实验一单链表的基本操作
一、实验目的
1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。
2.掌握线性表的各种物理存储表示和C语言实现。
3.掌握单链表的各种主要操作的C语言实现。
4.通过实验理解线性表中的单链表存储表示与实现。
二、主要仪器及耗材
普通计算机
三、实验内容与要求
1、用C语言编写一个单链表基本操作测试程序。
(1)初始化单链表
(2)创建单链表
(3)求单链表长度
(4)输出单链表中每一个结点元素
(5)指定位置插入某个元素
(6)查找第i个结点元素的值
(7)查找值为e 的结点,并返回该结点指针
(8)删除第i个结点
(9)销毁单链表
2、实验要求
(1)程序中用户可以选择上述基本操作。
程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。
(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。
(3)主函数实现对基本操作功能的调用。
3、主要代码
(1)初始化单链表
LinkList *InitList(){ //创建一个空链表,初始化线性表
LinkList *L;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
return L;
}
(2)创建单链表//头插法
void CreateListF(LinkList *L){
C语言数据结构线性表的基本操作实验报告
实验一线性表的基本操作
一、实验目的与基本要求
1.掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。
2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
3.掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。4.掌握运用C语言上机调试线性表的基本方法。
二、实验条件
1.硬件:一台微机
2.软件:操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试实现线性表的基本运算。
四、实验内容
1.建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
2.建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
3.假设有两个按数据元素值非递减有序排列的线性表A和B,均以顺序表作为存储结构。编写算法将A表和B表归并成一个按元素值非递增有序(允许值相同)排列的线性表C。(可以利用将B中元素插入A中,或新建C表)4.假设有两个按数据元素值非递减有序排列的线性表A和B,均以单链表作为存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C。
五、附源程序及算法程序流程图
1.源程序
(1)源程序(实验要求1和3)
#include<stdio.h>
#include<malloc.h>
数据结构课程设计实验1_城市链表
数据结构课程设计实验报告
实验一链表部分选题为:2.4.3—城市链表
1、需求分析
(1)创建一个带有头结点的单链表。
(2)结点中应包含城市名和城市的位置坐标。
(3)对城市链表能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
(4)能够对每次操作后的链表动态显示。
2、概要设计
为了实现以上功能,可以从以下3个方面着手设计。
(1)主界面设计
为了实现城市链表相关操作功能的管理,设计一个含有多个菜单项的主控菜单子程序以系统的各项子功能,方便用户使用本程序。本系统主控菜单运行界面如下所示。
(2)存储结构设计
本系统主要采用链表结构类型来表示存储在“城市链表”中的信息。其中链表结点由4个分量组成:城市名name、城市的横坐标posx、城市的纵坐标posy、指向下一个结点的指针next。
(3)系统功能设计
本程序设计了9个功能子菜单,其描述如下:
①建立城市链表。由函数creatLink()实现。该功能实现城市结点的输入以及
连接。
②插入链表记录。由函数insert()实现。该功能实现按坐标由小到大的顺序将
结点插入到链表中。
③查询链表记录。由searchName()函数和searchPos()函数实现。其中
searchName()实现按照城市名查询的操作,searchPos()实现按照城市坐标查询的操作。
④删除链表记录。由delName()函数和delPos()函数实现。其中delName
()函数实现按照城市名删除的操作,delPos()函数实现按照城市坐标删
除的操作。
⑤ 显示链表记录。由printList ()函数实现。该功能实现格式化的链表输出操作,可以显示修改后的链表状态。
数据结构单链表课程设计设计报告
数据结构单链表课程设计设计报告
《数据结构》课程设计报告
1)需求分析
此程序主要用来实现单链表的创建、
插入、删除、排序、并、交、差运算及
输出等基本操作。
程序需要根据使用者的需要来运算
得出符合要求的结果
①在程序运行的过程中根据提示进行输入,使用了scanf函数;
②使用了printf函数进行输出;
③程序输出符合使用者的需要的结果;
④程序能够输出任意运算的正确结果。
2)概要设计
1. 定义所需的数据结构
data *next
typedef struct LNode{
int data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
2. 模块划分
void LinkListCreat(LinkList &L,int n); //创建void ListInsert(LinkList head,int i,int e); //插入void ListDelete(LinkList head,int i,int e); //删除void printList(LinkList &head); //输出
2
void LinkListsort(LinkList &L); //排
序
void LinkListMerge(LinkList &La, LinkList
&Lb,LinkList &Lc); //并
void LinkListJiao(LinkList &La, LinkList &Lb,LinkList
&Lc); //交
void LinkListcha(LinkList &La, LinkList &Lb,LinkList
数据结构与算法实验报告-线性表(单链表)
沈阳工程学院
学生实验报告
(课程名称:数据结构与算法)
实验题目:线性表(单链表)
班级学号姓名
地点指导教师
实验日期: 年月日
一、实验目的
1.掌握线性表的链式存储结构——单链表的定义及其C语言的实现。
2.掌握线性表的基本操作
二、实验环境
Turbo C或是Visual C++
三、实验内容与要求
实验2 单链表的操作
请编制C程序,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。具体地说,就是要根据键盘输入的数据建立一个单链表;然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最后在屏幕菜单中选择0,即可结束程序的运行。
算法描述:本实验要求分别写出在单链表中第i(从1开始计数)个位置之后插入元素、创建单链表、在单链表中删除第i个位置的元素、顺序输出单链表的内容等的算法描述。
四、实验过程及结果分析
五、成绩评定
优良中及格不及格出勤
内容
格式
创新
效果
总评
指导教师:
年月日
数据结构实验最全 顺序表的操作及其应用
实验1 顺序表的操作及其应用
一、实验目的
1)掌握线性表的顺序存储结构;
2)熟练掌握顺序表基本算法的实现;
3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;
4)按照实验题目要求独立正确地完成实验内容
二、实验内容
要求:数据元素类型ElemType 取整型int 或者char。顺序存储实现如下算法:1)创建一顺序表;
2)输出该顺序表;
3)在顺序表中查找第i 个元素,并返回其值;
4)在顺序表中第i 个元素之前插入一已知元素;
5)在顺序表中删除第i 个元素;
6)实现顺序表的合并。(选做)
源程序:
//A Sequential List顺序表
#include <stdio.h>
#include <malloc.h>
#include <process.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define InitSize 100 //线性表存储空间的初始分配量
#define ListIncrement 10 //线性表存储空间的分配增量
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
链表实验报告总结doc
链表实验报告总结篇一:顺序表,链表总结实验报告
实验报告
实验目的:学生管理系统(顺序表)
实验要求:
1.建表
2.求表长
3.插入
4.查找
5.删除
6.列表
7.退出
源程序:
#include
#include
#include
#define MaxSize 1000
typedef struct
{
char xh[40];
char xm[40];
int cj;
}DataType; //学生的结构
typedef struct {
DataType data[MaxSize]; //定义表的数据类型
int length; //数据元素分别放置在data[0]到data[length-1]当中
} SqList; //表的结构
void liebiao(SqList *L)//
{
int k,n;
char q;
printf("请输入,输入学生的个数:\n");
fflush(stdin);
scanf("%d",&n);
for(k=0;k {
printf("请输入学生学号\n");
scanf("
%s",L->data[k].xh);
printf("请输入学生名字\n");
scanf("%s",L->data[k].xm);
printf("请输入学生成绩\n");
scanf("%d",&L->data[k].cj); 建立表格}
L->length=n;
}
void qb(SqList *L) //全部输出
{
int k,w;
for(k=0;klength;k++)
{
w=k+1;
printf("第%d位学生:",w);
链表的基本操作源代码
链表的基本操作源代码
//链表的基本操含有对链表的建⽴,插⼊,删除,查询,输出等基本操作
/在此特别提醒链表的基础尤为重要,在这⾥重写此代码能够更加深刻的理解了链表的空间的申请,
/头节点的建⽴以及头指针的重要和尾节点存在的必要性
/这个源代码以链表的创建为核⼼,为了怕⿇烦就没有进⾏优化,但是创建和输出是这个代码的核⼼。
/希望这个能帮助到初学者,在这有不懂得地⽅可以看我的随笔,链表的整表的创建,那⾥有更加详细的介绍/在此附上图:
⼀、初始化界⾯
⼆、创建链表
三、输出所创建的链表中元素
源代码:
//先建⽴⼀个完整的链表,然后对其进⾏增删改查
//在这⾥我们采⽤尾插⼊的⽅式来对其进⾏建⽴链表
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
typedef int DataType;
//声明节点
typedef struct node{
DataType data;
struct node *next;
}SLNode;
//创建头指针
SLNode *InitiateHead(SLNode*phead){
phead = (SLNode*)malloc(sizeof(SLNode));
phead->next = NULL;
return phead;
}
//创建链表
SLNode * Create_List(SLNode *head){//头节点开始的申请空间
SLNode *r,*p;
单片机多级菜单编程实现(ZT)建立一个树状的菜单结构,用链表实现
单片机多级菜单编程实现(ZT) 建立一个树状的菜单结构,用链表实现
链表中包含:
1、指向同级左右菜单和指向父菜单、子菜单的四个菜单结构体指针;
2、进入该菜单时需要执行的初始化函数指针
3、退出该菜单时需要执行的结束函数指针
4、该菜单内的按键处理函数指针数组的指针操作菜单模块需要的按键操作有:左、右、确认、退出。
采用这种办法,可以方便的添加或删减菜单。并且只需要在其头文件中修改初始变量就可以实现,完全无须修改C文件中的任何函数。
具体结构定义
我的定义,做个参考:
#define MENU_HLP_EN 菜单帮助信息使能
typedef struct
{
void (pMenuTaskInit)(void); 指向菜单任务初始化函数的指针
void (pMenuTaskEnd)(void); 指向菜单任务结束函数的指针
}MENU_TASK_TYP;
typedef struct MenuTyp
{
INT8U MenuName; 菜单名称字符串
WORK_MOD WorkMod; 工作状态编号
MENU_TASK_TYP pMenuTask; 指向菜单任务的指针
void (pTaskKeyDeal)(void); 指向菜单任务按键处理函数数组的指针
#ifdef MENU_HLP_EN
INT8U MenuHlp; 菜单帮助字符串
#endif
struct MenuTyp pParent; 指向上层菜单的指针
struct MenuTyp pChild; 指向子菜单的指针
struct MenuTyp pRight; 指向右菜单的指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%d", &n); while(n<0 || n>5) {
printf("非法输入!\n"); scanf("%d", &n); } switch(n) {
case 1: PrintList(head); printf("\n"); menu(head); break;
}else if(p==NULL){ q->next = r; r->next = p;
}else {
r->next = p; q->next = r; }
}
void PrintList(NODE *head)
//打印链表
{
NODE *p;
p=head->next;
printf("打印链表如下:\n");
#include <stdio.h> #include <stdlib.h> #include <malloc.h>
typedef struct node {
int data; struct node *next; }NODE;
//定义数据结构
NODE *CreateList() {
NODE *head,*q,*p; int a,n;
return 0; }
while(n!=0 && n!=1) {
printf("非法输入!\n"); scanf("%d", &n); }
if(n == 0) {
a=CreateDefaultList(); printf("\n"); menu(a); }else{
a=CreateList(); printf("\n"); menu(a); }
} q->next=NULL;
return(head); }
void InsertList(NODE *head) {
NODE *p,*q,*r; int numInsert; p = head->next; q=NULL;
//插入数据
printf("请输入想插入的数字:\n"); scanf("%d", &numInsert);
printf("链表为空!"); }else{
q=p->next; }
if(p!=NULL && q==NULL)
{ if(p->data>mink && p->data<mink) { head->next = NULL; }
}
while(q!=NULL) {
if(q->data>mink && q->data<maxk) {
//创建链表
head=(NODE*)malloc(sizeof(NODE)); q=head;
printf("您想输入几个数字:\n"); scanf("%d",&n);
if(n>0){ printf("请输入数字:\n"); while(n>0) { scanf("%d",&a); p=(NODE*)malloc(sizeof(NODE)); p->data=a; q->next=p; q=p; n--; }
r=(NODE*)malloc(sizeof(NODE)); r->data = numInsert;
while(p!=NULL && p->data <= r->data) {
q = p; p = q->next; }
if(q==NULL){ r->next = p; head->next = r;
NODE *p,*q; int mink,maxk; printf("请输入 mink:"); scanf("%d", &mink); printf("请输入 maxk:"); scanf("%d", &maxk);
if(maxk<mink) {
printf("非法输入!"); }
p = head->next; q = NULL; if(p==NULL) {
int main()
{
printf("********************************\n");
printf("*
链表操作演示
*\n");
printf("********************************\n\n\n");
int n = 0; NODE *a; printf("请选择使用默认创建的链表(0)或是自行创建链表(1)\n"); printf("默认链表为:10->20->30->40\n"); scanf("%d", &n);
p->next = q->next; q = p->next; }else{ p = q; q = p->next; } } }
void menu(NODE *head) {
printf("键入 1:打印单链表\n"); printf("键入 2:在有序单链表中插入元素 x\n"); printf("键入 3:单链表就地逆置\n"); printf("键入 4:在有序单链表中删除所有值大于 mink 且小于 maxk 的元素\n"); printf("请选择你要进行的操作—>\n");
待评审代码:链表的基本操作
从键盘读入 n 个整数(升序),请编写算法实现: (1) CreateList():建立带表头结点的单链表; (2) PrintList():显示单链表,(形如:H->10->20->30->40); (3)InsertList():在有序单链表中插入元素 x; (4) NizhiList():单链表就地逆置; (5)DelList():在有序单链表中删除所有值大于 mink 且小于 maxk 的元素。
printf("链表为空!"); }else{
q=p->next; }
p->next = NULL;
while(q!=NULL) {
head->next = p; p = q; q = p->next; p->next = head->next; } head->next = p;
}
void DelList(NODE *head) //在有序单链表中删除所有值大于 mink 且小于 maxk 的元素 {
} q->next=NULL;
return(headΒιβλιοθήκη Baidu; }
NODE *CreateDefaultList() {
NODE *head,*q,*p; int num=10; int n=4;
//创建链表
head=(NODE*)malloc(sizeof(NODE)); q=head;
if(n>0){ while(n>0) { p=(NODE*)malloc(sizeof(NODE)); p->data = num; q->next = p; q = p; num = num + 10; n--; }
case 2:
} }
InsertList(head); printf("\n"); menu(head); break; case 3: NizhiList(head); printf("\n"); menu(head); break; case 4: DelList(head); printf("\n"); menu(head); break;
while(p!=NULL)
{
printf("%5d —>",p->data);
p=p->next;
}
printf("NULL");
}
void NizhiList(NODE *head) {
NODE *p,*q; p = head->next; q = NULL;
//链表逆置
if(p==NULL) {