#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语言实现的更多相关文章

  1. 已知长度为n的线性表采用顺序结构,写一算法删除该线性表中所有值为item的元素

    /** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 * @description: * @version:$ */ /*已知长度为 ...

  2. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  3. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

  4. D_S 线性表的顺序表示和实现

    线性表的顺序表示又称为顺序存储结构或顺序映像 顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,简言之,逻辑上相邻,物理上也相邻 顺序存储方法:用一组地址连续的存储单元依次存 ...

  5. javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现

    线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...

  6. c/c++ 线性表之顺序表

    线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...

  7. 线性表之顺序栈C++实现

    线性表之顺序栈 栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出 一.顺序栈的头文件:SeqStack.h //顺序栈头文件 #include<iostream> us ...

  8. 线性表之顺序表C++实现

    线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件 #include<iostream> ; //定义顺序表SeqList的模板类 template<class ...

  9. 线性表中顺序表的的理解和实现(java)

    线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...

随机推荐

  1. 苏浪浪 201771010120 《面向对象程序设计(java)》第9周学习总结

    实验九异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2. ...

  2. LeetCode上的SQL练习

    184. 部门工资最高的员工 SELECT D. NAME Department, E. NAME Employee, E.Salary FROM -- 内连接两张查询表 Employee E INN ...

  3. SQL——处理列中NULL值

    处理NULL值 - 数据库中某列为NULL值,使用函数在列值为NULL时返回固定值.    SQLServer:ISNULL(col,value)        示例:SELECT ISNULL(co ...

  4. Java——java.lang.NullPointerException

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = ...

  5. pytest跟unittest的优势跟劣势

    一.用例编写规则 1.使用unittest编写测试用例必须遵循以下规则: 1.必须首先 导入 import unittest 2.测试类必须要继承 unittest.TestCase 3.测试方法必须 ...

  6. Life In Changsha College - SQA计划和系统测试规程

    一. SQA计划 (1)     对软件进行测试,保证软件不出问题: (2)     项目需要符合IEEE.ISO等软件工程标准 (3)     软件拥有基本的流程图.类图.数据流图等 (4)    ...

  7. 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法

    由于该电脑是实验室公用跑模型的机子,在解决过程中,发现是 cuda 导致一直进不了系统.原因是装了两个不同版本的cuda,一个9.2,另一个10.0,因为是公用的,目前尚不清楚,怎么同时装上两个的,也 ...

  8. Charles截获iPhone网络请求

    Charles介绍:Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,有时为了调试与服务器端的网络通讯协议,常常需要服务端原因一起调试.有了Charles客户端人员自娱自乐了,想怎 ...

  9. 我的第一个jQuery插件开发(日期选择器,datePicker),功能还不完善,但用于学习参考已经足够了。

    一.学习jQuery插件开发网上的帖子很多,插件开发的方式也有好几种,现在推荐一个帖子讲述的特别好,我也是这篇文张的基础上学习的. 参考:http://www.cnblogs.com/ajianbey ...

  10. 通过link的preload进行内容预加载

    Preload 作为一个新的web标准,旨在提高性能和为web开发人员提供更细粒度的加载控制.Preload使开发者能够自定义资源的加载逻辑,且无需忍受基于脚本的资源加载器带来的性能损失. <l ...