2019-02-03 线性表的顺序储存结构C语言实现
#include<cstdio>
#define MAXSIZE 20
typedef int Elemtype; //Elemtype类型根据实际情况而定,这里取int
typedef struct
{
int data[MAXSIZE];
int length;
}Sqlist; //线性表的顺序储存结构
//线性表的抽象数据类型
Sqlist InitList(Sqlist* L) //初始化建立一个空表
{
Sqlist list;
L->length = 0;
list.length = L->length;
for(int i=0;i<MAXSIZE;++i)
list.data[i] = 0;
return list;
}
bool ListEmpty(Sqlist* L){ //若线性表为空返回true不然返回false
if(L->length==0) return true;
return false;
}
bool ClearList(Sqlist *L) //清空线性表
{
for(int i=0;i<MAXSIZE;++i)
L->data[i] = 0;
return true;
}
bool GetElem(Sqlist L,int i,Elemtype* e) //将线性表的第i个位置元素返回给e,若不存在返回false
{
if(L.length==0 || i<1 || i>L.length)
return false;
*e = L.data[i-1]; //因为return返回状态,故这里用指针实现
return true;
}
int LocateElem(Sqlist* L,Elemtype e) //在线性表L中查找与给定值e相等的元素,若查找成功,返回该元素在表中的标号表示成功;否则返回0表示失败
{
for(int i=0;i<L->length;++i)
{
if(L->data[i] == e) return i;
}
return false;
}
bool ListInsert(Sqlist* L,int i,Elemtype e) //在线性表L中的第i个位置插入新元素e
{
int k;
if(L->length == MAXSIZE)
return false;
if(i<1 || i>L->length)
return false;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--) //将要插入位置之后的数据依次后移
L->data[k+1] = L->data[k];
}
L->data[i-1] = e; //插入元素e
L->length++; //长度+1
return true;
}
bool ListDelete(Sqlist* L,int i,Elemtype* e) //删除线性表L中的第i个位置元素,并用e返回其值
{
int k;
if(L->length == 0)
return false;
if(i<1 || i>L->length)
return false;
*e = L->data[i-1];
if(i<L->length) //删除位置后继元素前移
{
for(k=i;k<L->length;k++)
L->data[k-1] = L->data[k];
}
L->length--;
return true;
}
int ListLength(Sqlist *L) //返回线性表L的元素个数
{
int k=0;
for(int i=0;i<MAXSIZE;++i)
{
if(L->data[i] != 0) ++k;
}
L->length = k;
return k;
}
}
线性表的顺序结构及基本操作
虽然很简单,但是因为我菜,还是弄了蛮久
遇到的两个问题:
Elemtype* e = NULL;
//之后函数里给e赋值,就崩了,原来空指针是不能进行赋值操作的
//改为:
Elemtype a;
Elemtype* e = a;
//ok了
还有一个问题待解决:
我这里计算线性表长度的时候是计算了非0元素的个数,初始化时把线性表元素默认初始化为0了,不知道有没有什么好的解决方法,但是链式储存应该就不会有此类问题了(明天再玩)
就酱
2019-02-03 线性表的顺序储存结构C语言实现的更多相关文章
- 已知长度为n的线性表采用顺序结构,写一算法删除该线性表中所有值为item的元素
/** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 * @description: * @version:$ */ /*已知长度为 ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- D_S 线性表的顺序表示和实现
线性表的顺序表示又称为顺序存储结构或顺序映像 顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,简言之,逻辑上相邻,物理上也相邻 顺序存储方法:用一组地址连续的存储单元依次存 ...
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...
- c/c++ 线性表之顺序表
线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...
- 线性表之顺序栈C++实现
线性表之顺序栈 栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出 一.顺序栈的头文件:SeqStack.h //顺序栈头文件 #include<iostream> us ...
- 线性表之顺序表C++实现
线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...
- 线性表中顺序表的的理解和实现(java)
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...
随机推荐
- 【python 爬虫】fake-useragent Maximum amount of retries reached解决方案
前言 在用fake-useragent的时候发生报错,fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reach ...
- JS中的var、let、const三者的区别
ES5:var ES6:let.const ES5中的作用域有---全局作用域.函数作用域 ES6中新增了---块级作用域(块级作用域由{}包裹,if语句.for语句中的{}也属于块 ...
- Nginx 实现 HTTPS(基于 Let's Encrypt 的免费证书)
SSL / TLS加密会为您的用户带来更高的搜索排名和更好的安全性. Let’s Encrypt 是一个认证机构(CA).它可以提供免费证书,并且已经被大多数浏览器所信任.另外,通过工具 Certbo ...
- 学会使用Hdlbits网页版Verilog代码仿真验证平台
给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...
- 微信小程序初探--写个扫雷分享给你玩
闲暇里,想学一下微信小程序, 于是,用微信小程序原生做了个扫雷玩. 以下略作总结,分享给大家. 微信里下拉,输入[mini计算器], 看到这个图标的就是了: 说好的扫雷,怎么变成计算器了?原因后面解释 ...
- C# 数据操作系列 - 18 让Dapper更强的插件
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...
- Spring_自动装配 & bean之间的关系 & bean的作用域
1.自动装配 beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)
1.简介 上一篇中宏哥已经将其的理论知识介绍了一下,这一篇宏哥就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划. 2.网络计划实战 通过上一篇的学习,宏哥将其 ...
- Java实现 LeetCode 592 分数加减运算(纯体力活)
592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...
- java实现第七届蓝桥杯四平方和
四平方和 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^ ...