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)
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...
随机推荐
- 201771010117—马兴德—实验一 软件工程准备—掌握博客中MarkDown的使用以及通读《现代软件工程—构建之法》的总结
实验一 软件工程的前期准备工作 在前期的准备工作以及老师上课的讲解中,我懂得了"软件=程序+软件工程"这句话的基本含义,以前只是对软件工程有一个很浅显的概念,现在在读了<现代 ...
- MySQL(2)— 数据库的基本操作
二.数据库 2-1.操作数据库(了解) 1.创建数据库 CREATE DATABASE [IF NOT EXIST] myDatabase; 2.删除数据库 DROP DATABASE `myData ...
- 你以为只有马云会灌鸡汤?Linux 命令行也会!
你以为只有马云会灌鸡汤?Linux 命令行也会! "Linux 太南了o(╥﹏╥)o","我累了不想奋斗了o(︶︿︶)o"... 不知道你有没有想过,在你快丧失 ...
- yum CentOS7安装mysql
配置阿里云yum源 [root@bogon ~]# cd /etc/yum.repos.d/ [root@bogon yum.repos.d]# mkdir repo_bak [root@bogon ...
- Java——参数传递
写这篇文章时,其实还是不理解Java中的参数传递只有传值没有传址(传引用).这里引用知乎上大神的讲解来记录一下. 一.基本类型和引用类型 int num = 10; String str = &quo ...
- 阿里云服务器centOS安装Docker
环境准备 1.需要有Linux的基础 2.centOS 7 环境查看 # 系统内核是 3.10 以上的 [root@iz2zeaet7s13lfkc8r3e2kz ~]# uname -r -.el7 ...
- [译] 制作 Vue 3 的过程
原文链接: https://increment.com/frontend/making-vue-3 在过去的一年里,Vue 团队一直在研究 Vue.js 的下一个主要版本,我们希望在 2020 年上半 ...
- [SD心灵鸡汤]000.每月一则 - 索引
[SD心灵鸡汤]001.每月一则 - 2015.05 [SD心灵鸡汤]002.每月一则 - 2015.06 [SD心灵鸡汤]003.每月一则 - 2015.07 [SD心灵鸡汤]004.每月一则 - ...
- 【MetaPruning】2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning-论文阅读
MetaPruning 2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning Zechun ...
- jchdl - GSL Node
https://mp.weixin.qq.com/s/Oa4qgjIUccu5Y-Jlqcyn_A org.jchdl.model.gsl.core.meta.Node.java gen ...