线性表的链式存储结构及操作的实现
要求:利用书本上的线性表的顺序存储结构定义:
1)编写完成下列功能的函数:(1)初始化一个线性表;(2)在已经初始化的基础上,创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数x插在第i个元素前(x和i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入),并在删除结束后输出删除元素的值;(5)查找给定值x是否在线性表中(x在程序运行时输入),若在,输出x在线性表中第一次出现的位置,若不在就输出x不在表中的提示;(6)输出线性表中所有元素。
2)要求编一菜单,根据选项调用各函数执行,并在使线性表有所变化的每一步输出线性表的内容,以验证你编程序的正确性。
备注:(1)在C的头文件stdlib.h中有srand( )接受随机数的种子和rand( )产生0~RAND_MAX的一个随机整数的函数。用rand( )%100+1可以产生不大于100的正整数值。(2)所编程序要具有一定的健壮性,即:在插入删除时要考虑表空、表满、位置是否合法等情况,当输入数据非法时,程序也能适当的做出反应,而不致于出现莫名其妙的结果。
算法步骤:
1.初始化一个线性表;
2.使用srand( )接受随机数的种子和rand( )随机产生包含15个不大于100的正整数值的线性表,输出线性表的值使操作者观察此步是否完成;
3.将所插入数x和插入位置i传入函数中,将链表逐个后移至位置i处并判断插入位置i是否合法,若合法命名一个新的链表,将x赋入链表数据中,是新链表的next指向原来链表的next,原来链表的next指向新链表,若不合法则报错;
4.将所删除的位置i传入函数中,,将链表逐个后移至位置i处并判断插入位置i是否合法,若合法则将链表的next指向next的next,并将原来next位置的链表释放,若不合法则报错;
5.从线性表第一个数字起逐个后移并查找是否与给定值x相等,若相等则在线性表中(x在程序运行时输入),并输出x在线性表中第一次出现的位置,若不在输出x不在表中;
6.利用for循环逐个输出线性表中所有元素;
7.使链表逐个释放;
8.编写一菜单,便于使用者根据选项调用各函数执行;
9.使用switch()执行使用者的操作。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct LNode{ElemType data; //数据域struct LNode *next;//指针域
}LNode,*LinkList;
Status InitList(LinkList &L)
{L=(LinkList)malloc(sizeof(LNode));if(!L) return ERROR;L->next=NULL;return OK;
}//创建初始线性表
Status CreatList(LinkList &L)
{LinkList p,r=L;srand(time(0));for(int i=1;i<=15;i++){p=(LinkList)malloc(sizeof(LNode));p->data=rand()%100+1;p->next=r->next;r->next=p;r=r->next;}//对线性表赋值(所赋值由计算机随机产生)
}//赋值初始线性表
Status InsertList(LinkList &L,int i,int x)
{LinkList p=L,s;int j=0;while(p&&j<i-1){p=p->next;j++;}if(!p||j>i-1) return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;return OK;
}//将一个数x插在第i个元素前(x和i在程序运行时输入)
Status DestroyElem(LinkList &L,int i)
{LinkList p=L,q;int j=0;while(p->next&&j<i-1){p=p->next;j++;}if(!(p->next)||j>i-1) return ERROR;printf("删除的元素是%d\n",p->next->data);q=p->next;p->next=q->next;free(q);return OK;
}//删除并输出第i个元素
Status FindElem(LinkList &L,int x)
{LinkList p=L;int i=0;while(p->next){if(p->data==x){printf("元素%d在线性表中,其位置为%d!\n",x,i);break;}p=p->next;i++;}if(p->next==NULL&&p->data!=x)printf("元素%d不在线性表中!\n",x);return OK;
}//查找给定值x是否在线性表中
void PutList(LinkList L)
{LinkList p=L->next;printf("线性表中的元素:");while(p!=NULL){printf("%4d",p->data);p=p->next;}printf("\n");
}//输出线性表中所有元素
Status DestoryList(LinkList &L)
{LinkList pre=L,p;while(pre!=NULL){p=pre->next;free(pre);pre=p;}
}
int menu()
{printf("菜单:\n");printf("1.初始化一个线性表\n2.赋值初始线性表\n3.插入元素\n4.删除元素\n5.查找元素\n6.输出线性表\n7.销毁链表\n8.结束程序\n");printf("请输入您要实施的项目:");
}
int main()
{int option,location,element;LinkList List;InitList(List);//初始化线性表menu();scanf("%d",&option);while(option!=8){//判断程序是否需要结束switch(option)//判断所执行命令{case 1:printf("线性表初始化完成!\n");break;case 2:printf("2:赋值初始线性表\n");CreatList(List);PutList(List);break;case 3:printf("3:插入一个数字\n");printf("插入元素位置:");scanf("%d",&location);printf("插入元素数值:");scanf("%d",&element);InsertList(List,location,element);PutList(List);break;case 4:printf("4:删除一个数字\n");printf("删除元素位置:");scanf("%d",&location);DestroyElem(List,location);PutList(List);break;case 5:printf("5:查找元素\n");scanf("%d",&element);FindElem(List,element);break;case 6:printf("6.输出元素:\n");PutList(List);break;case 7:DestoryList(List);printf("内存释放完毕!");default:printf("输入菜单名称错误\n");}menu();scanf("%d",&option);};printf("程序已结束,bye!");return 0;
}
线性表的链式存储结构及操作的实现相关推荐
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 链表list(链式存储结构实现)_5 线性表的链式存储结构
系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 数据结构开发(5):线性表的链式存储结构
0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...
- 线性表(链式存储结构)C语言
文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...
- Python 数据结构 之 线性表 的链式存储结构
用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明: Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...
- 【数据结构】CH2 线性表的链式存储结构
目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...
- 线性表的链式存储结构以及单链表的插入和删除原理实现
线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...
最新文章
- 十进制小数转换为二进制
- Trie 树是什么样的数据结构?有哪些应用场景?
- l2-002 链表去重 (未解决)
- Jakarta EE工作组正式成立
- 一文看懂压敏电阻和tvs的区别
- [Java] 蓝桥杯 BASIC-1 基础练习 闰年判断
- 我有一百种方法让你的Excel连上数据库
- 开源加速器Gemmini代码解析(一):脉动阵列
- cocos2dx 基础
- 斯坦福NLP名课带学详解 | CS224n 第1讲 - NLP介绍与词向量初步(NLP通关指南·完结)
- idea谷歌翻译插件translation失效问题(可行)
- Linux编程之ICMP洪水攻击
- 大厂面试快问快答,10分钟搞定MySQL夺命20问,你都能接住吗?
- 不支持虚拟化的cpu如何开VM虚拟机(不支持,即“主机不支持Intel VT-x,不是支持Intel VT-x,但Intel VT-x禁处于禁用状态!!!!!!)
- Godaddy域名解析设置
- Ubuntu 12.04 首个测试版发布
- [PCIe]PCIe设备在一个系统中是如何发现与访问的
- Java 自动类型转换,强制类型转换
- opencv 彩色图像对比度增强
- linux服务器无法识别u盘,linux系统下不能识别U盘