【数据结构】:实现顺序表各种基本运算的算法
文章目录
- 目的
- 内容
- 二、详细代码
- 运行结果
目的
领会顺序表存储结构和掌握顺序表中各种基本运算算法设计。
内容
编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个主程序,完成如下功能:
初始化顺序表L
依次插入a,b,c,d,e元素
输出顺序表L
输出顺序表L长度
判断顺序表是否为空
输出顺序表L的第3个元素
输出元素a的位置
在第4个元素位置上插入f元素
输出顺序表L
删除顺序表L的第3个元素
输出顺序表L
释放顺序表L
二、详细代码
代码如下:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct SqList {ElemType data[MaxSize];int length;
}SqList;void InitList(SqList*& L) {//初始化线性表L = (SqList*)malloc(sizeof(SqList));L->length = 0;
}
void DestroyList(SqList*& L) {//销毁线性表free(L);
}
bool ListEmpty(SqList* L) {//判断线性表是否为空表return (L->length == 0);//通过L->length判断,length为0的时候,即是空表
}
int ListLength(SqList* L) {//求线性表的长度return (L->length);//直接返回length即可
}
bool GetElem(SqList* L, int i, ElemType e) {//求线性表中第i个元素值i--;if (i<0 || i>L->length - 1) {//判断数据合法性return false;//}else {//若合法,则输出e = L->data[i];return true;}
}
void DispList(SqList* L) {//输出线性表for (int i = 0; i < L->length; i++) {//利用循环遍历数组,逐一输出数组元素printf("%c", L->data[i]);}printf("\n");
}
int LocateElem(SqList* L, ElemType e) {//查找第一个值域为e的元素序号for (int i = 0; i < L->length; i++) {if (e == L->data[i]) {return i+1;}}return 0;
}
bool InsertElem(SqList*& L, int i, ElemType e) {//插入第i个元素int j;if (i<1 || i>L->length + 1 || L->length == MaxSize) {//对插入位置进行判断,插入位置要在表中,且表的长度与MaxSize不可相等,不然插入后数据会溢出return false;}i--;//将i从元素位置转换成数组下标for (j = L->length; j > i;j--) {//将插入元素后面的元素往后移动一个位置L->data[j] = L->data[j - 1];}L->data[i] = e;L->length++;return true;
}
bool ListDelete(SqList*& L, int i, ElemType e) {//删除第i个元素int j;if (i<1 || i>L->length) {return false;}i--;e = L->data[i];for (j = i; j < L->length - 1; j++) {L->data[j] = L->data[j + 1];}L->length--;return true;
}
//到此为止,我们已经将可能用到的函数定义完毕
//下面基本只需调用以上函数即可
int main() {SqList* L;ElemType e = 0;printf("顺序表的基本运算如下");printf("(1)初始化顺序表L\n");InitList(L);printf("(2)依次插入a,b,c,d,e元素\n");InsertElem(L, 1, 'a');InsertElem(L, 2, 'b');InsertElem(L, 3, 'c');InsertElem(L, 4, 'd');InsertElem(L, 5, 'e');printf("(3)输出顺序表L:\n");DispList(L);printf("(4)顺序表L长度:%d\n",ListLength(L));printf("(5)顺序表L为%s\n", ListEmpty(L));GetElem(L, 3, e);printf("(6)顺序表L的第3个元素:%c\n",e);printf("(7)元素a的位置:%d\n",LocateElem(L,'a'));printf("(8)在第四给元素位置上插入f元素\n");InsertElem(L, 4, 'f');printf("(9)输出顺序表L:\n");DispList(L);printf("(10)删除L的第3个元素\n");ListDelete(L, 3, e);printf("(11)输出顺序表L:\n");DispList(L);printf("(12)释放顺序表L\n");DestroyList(L);return 1;}
运行结果
如下
【数据结构】:实现顺序表各种基本运算的算法相关推荐
- 实验题一(实现顺序表各种基本运算的算法)
目的:领会顺序表存储结构和掌握顺序表中各种基本运算算法设计. 内容:编写一个.cpp的程序,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型为 Elemtype char),并在此基础上设 ...
- 实现顺序表各种基本运算的算法
编写一个头文件SqList.h,实现顺序表的各种基本操作,并在此基础上设计一个主程序(exp2_1.cpp)完成如下功能: 初始化顺序表L 依次采用尾插法插入a,b,c,d,e元素 输出顺序表L 输出 ...
- 【数据结构】顺序表的应用(4)(C语言)
[数据结构]顺序表的应用(1)(C语言) [数据结构]顺序表的应用(2)(C语言) [数据结构]顺序表的应用(3)(C语言) 设计一个算法,将一个顺序表倒置,即如果顺序表各个节点值存储在一维数组a中, ...
- 【数据结构】顺序表的应用(3)(C语言)
问题: 已知一个顺序表中的各节点值是从大到小有序的,设计一个算法,插入一个值为x的节点,使顺序表中的节点仍然是从小到大有序的. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #includ ...
- 【数据结构】顺序表的应用(2)(C语言)
问题: 2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列. 头文件与该头文件一样:[数据结构]顺序表的实现(C语言) #in ...
- 第3周实践项目1 顺序表的基本运算
/*copyright (t) 2017,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:邵雪源 *完成日期:2017年9月19日 *版本号:v1.0 ...
- 数据结构25 ————顺序表查找
数据结构25 ----顺序表查找 一. 目录 文章目录 数据结构25 ----顺序表查找 一. 目录 二. 顺序表查找 三. 顺序表查找代码 1.基本算法 2.进行优化 四. 参考资料 二. 顺序表查 ...
- 【数据结构】顺序表的应用(1)(C语言)
问题: 1.将顺序表(a1,a2,-,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型). 头文件与该头文件一样:[数据 ...
- 数据结构 创建顺序表
3.18数据结构--创建顺序表 运行结果截图: #define _CRT_SECURE_NO_WARNINGS #define MAXSIZE 100 #include<stdio.h> ...
最新文章
- 2019最具特色的web前端技术分享
- aitken插值方法的c++代码_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载
- linux的命令窗口,(翻译)Linux命令行(二)
- STM32F7xx —— CAN通信
- think php 3.2.3 环境,ThinkPHP 3.2.3 入口文件配置
- mysql数据库undo日志恢复_MySQL的undo/redo日志和binlog日志,以及2PC
- 【大数据部落】用R挖掘Twitter数据
- Win7性能优化:解决多核处理器兼容问题
- 基于javaweb+springboot的在线购书系统网上书店图书商城(前台、后台)(java+Springboot+ssm+mysql+maven)
- 火星开发板_数据科学家来自火星,软件开发人员来自金星
- Ubuntu 16.04 RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller” 不能上网
- 1068. Find More Coins (30)搜索题
- MT6573 1048MP 版本发布(笔记)
- 【用Java模拟KTV点歌系统】
- 个人所得税分几个等级
- Frament与activity切换
- 微软skype收购案
- 2022年服务器行业研究报告
- linux mutt 收不到邮件,mutt 发邮件189邮件收不到邮件内容的解决办法
热门文章
- 【web初步】浮动(float)
- 基于 NGINX 的 WAF 配置方法之ModSecurity
- 模拟器运行错误: invalid device state
- iOS本地推送实现备忘录闹铃提醒
- 我想请问在中国一级和二级硕士点它们有什么区别?所以我可不可以这样理解,一级硕士点获得的是学术学位,二级硕士学位获得的是专业学位请问为什么accountable不是可以数清的意思,而是有责任心
- 中文编码为英文方式:
- 蔬菜配送小程序开发功能包含什么
- 00.Docker 搭建本地ChatGPT,后端优化,绕过 Cloudflare,速度喜人。
- 最新传智播客黑马前端从基础班到就业班(视频+资料)
- IE退役,Edge接棒,成为Windows 10和Windows 11默认浏览器