《数据结构》 顺序表常用操作代码集合
时间:2022-04-26
本文章向大家介绍《数据结构》 顺序表常用操作代码集合,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Ps:每段代码中,添加了署名Solo的是博主自己写的,其余来自课本或者老师。
//定义线性表的存储结构
#define MAXSIZE 100
typedef struct
{
ElemType elem[MAXSIZE]; //ElemType自定义
int last;
} SeqList;
//线性表按查找内容运算 Locate(L,e)函数
int Locate(SeqList L, ElemType e)
{
i = 0;
while((i <= L.last) && (L.elem[i] != e))
i++;
if(i <= L.last) return(i + 1);
else return(-1);
}
//线性表的插入操作
#define OK 1
#define ERROR 0
int InList(Seqlist *L, int i, ElemType e)
{
int k;
if(i < 1 || i > L->last+2)
{
printf("插入位置i不合法");
return ERROR;
}
if(L->last >= MAXSIZE - 1)
{
printf("表已满,无法插入");
return ERROR;
}
for(k = L->last; k >= i-1; k--)
L->elem[k+1] = L->elem[k];
L->elem[i-1] = e;
L->last++;
return OK;
}
//线性表的删除操作
int DelList(SeqList *L, int i, ElemType *e)
{
int k;
if(i < 1 || i > L->last+1)
{
printf("删除位置不合法");
return ERROR;
}
*e = L->elem[i-1];
for(k = i; i <= L->last; k++)
L->elem[k-1] = elem[k];
L->last--;
return OK;
}
//线性表原地逆置
int SListRev(SeqList *L)
{
int i;
ElemType t;
for(i=0; i<L->last/2; i++)
{
t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;
}
return Ok;
}
//线性表的合并运算1
void mergeList(SeqList *LA, Seqlist *LB, Seqlist *LC)
{
int i,j,k;
i=0; j=0; k=0;
while(i <= LA->last && j <= LB->last)
if(LA->elem[i] <= LB->elem[j])
{
LC->elem[k] = LA->elem[i];
i++; k++;
}
else{
LC->elem[k] = LB->elem[i];
j++; k++;
}
while(i <= LA->last)
{
LC->elem[k] = LA->elem[i];
i++; k++;
}
while(j <= LB->last)
{
LC->elem[k] = LA->elem[j];
j++; k++;
}
LC->last = LA->last + LB->last + 1;
}
//线性表的合并运算2——Solo
void mergeList(SeqList *LA, Seqlist *LB, Seqlist *LC)
{
int i,j,k;
i=0; j=0; k=0;
while(i <= LA->last || j <= LB->last)
if(LA->elem[i] <= LB->elem[i] || (i <= LA->last && j > LB->last )
{
LC->elem[k] = LA->elem[i];
i++; k++;
}
if(LA->elem[i] > LB->elem[j] || (i > LA->last && j <= LB->last))
{
LC->elem[k] = LB->elem[i];
j++; k++;
}
}
/*删除非递减顺序表L中所有值相等元素——Solo*/
//①若相等的值只有一个,为e,只有该种情况才能满足《数据结构》课本习题的要求
void Delsame(Seqlist *L e)
{
int i,j;
for(i=0,j=0; i<L->last; i++)
if(L->elem[i] != e) { L->elem[j] = L->elem[i]; j++; }
L->last = j+1;
}
//②若相等的值有很多,且不确定 两种方法
void Delmulsame(Seqlist *L)
{
int i,j,k;
for(i=0; i<L->last; i++)
for(j=1; j<L->last; j++)
{
if(L->elem[i] = L->elem[j])
for(k=j; j<L->last; k++)
{
L->elem[k] = L->elem[k+1];
L->last--;
}
}
}
void Delmulsame(Seqlist *L)
{
int i,j,k,t;
for(i=0; i<L->last-1; i++)
{
for(k=i, j=i+1; j<n; j--) //冒泡法排序
if(a[j] <a[k]) k = j;
if(k != i)
{ t = a[i]; a[i] = a[k]; a[k] = t; }
}
/* for(i=0; i<L->last-1; i++) //这段被注释掉了,是选择法排序
for(j=L-last-1; j>=i; j--)
if(a[j] > a[j+1])
{ a[j] = t; a[j] = a[j+1]; a[j+1] = a[j]; } */
for(i=0; i<L->last; i++)
{
if(L->elem[i] = L->elem[i+1])
{
for(k=i; k<L->last; k++)
{
L->elem[k] = L->elem[k+1];
k--;
L->last--;
}
}
}
}
zhihu:Solo | weibo@从流域到海域
- Selenium2+python自动化33-文件上传(send_keys)
- hive的partition的作用和使用方法
- 线段树,最大值查询位子(个人模版)
- set使用实例1+lower_bound(val)(个人模版)
- Selenium2+python自动化29-js处理多窗口
- 谷歌「机弦」有何玄机?
- 01字典树贪心查询+建立+删除(个人模版)
- 优先队列(个人模版)
- Numpy教程第2部分 - 数据分析的重要功能
- 最小表示法(个人模版)
- 基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)
- 并查集(个人模版)
- Markdown 语法和 MWeb 写作使用说明既然都整理了,捎带手把这个也整理了吧第一级标题<h1>
- 带权并查集(个人模版)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于thinkphp5的报错 "mkdir() Permission denied"的解决
- 不同步节点在线使用Remix开发以太坊Dapp及solidity学习入门 ( 一 ):智能合约HelloWorld
- solidity编写eth智能合约之contract 创建合约(二)
- solidity modifier函数修改器 智能合约开发知识浅学(三)
- solidity struct 结构体创建与使用浅学 (四)
- solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
- Web程序员的Mysql进阶序二之sql多条数据插入、多条数据更新、多表同时查询
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
- nginx 修改配置文件使之支持pathinfo,且隐藏index.php
- 微信jssdk开发,PHP,必要步骤
- 微信JSSDK分享页面自定义当前链接最简单示例
- (一)python3 只需3小时带你轻松入门—— 编程尝试
- (二)python3 只需3小时带你轻松入门——基本变量
- (三)python3 只需3小时带你轻松入门—— 变量的简单运算
- (四)python3 只需3小时带你轻松入门—— 流程控制