一、库函数的导入和声明

#include <stdio.h>
#include <stdlib.h>#define MAXSIZE 100 //线性表存储数量的最大值
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2typedef char ElemType; //该顺序表的数据类型为字符型
typedef int Status;

二、定义顺序表SqList


//静态内存分配
//typedef struct SqList{//    ElemType elem[MAXSIZE];
//    int length;
//}SqList;//动态内存分配
typedef struct SqList {ElemType *elem;int length;
} SqList;

三、顺序表基本方法的实现

1.初始化线性表 InitList_Sq(SqList *L)

//线性表L的初始化
//构造一个空的顺序表L
Status InitList_Sq(SqList *L) {//为顺序表分配空间L->elem = (ElemType *) malloc(sizeof(ElemType) * MAXSIZE);//存储分配失败//若无内容 则默认值为0 返回OVERFLOW -2if (!L->elem) {exit(OVERFLOW);}//空表长度为0L->length = 0;return OK;
}

2.销毁线性表 void DestroyList(SqList *L)

//销毁线性表
void DestroyList(SqList *L) {//释放存储空间if (L->elem) {free(L->elem);}
}

3.清空线性表 void ClearList(SqList *L)

//清空线性表
void ClearList(SqList *L) {//将线性表的长度置为0L->length = 0;
}

4.求线性表L的长度 GetLegnth(SqList L)

//求线性表L的长度
Status GetLength(SqList L) {return L.length;
}

5.判断线性表是否为空 IsEmpty(SqList L)

//判断线性表L是否为空
Status IsEmpty(SqList L) {if (L.length == 0) {return TRUE;} else {return FALSE;}
}

6.顺序表的取值(根据位置i获取相应位置数据元素的内容)  GetElem(SqList L,int i,ElemType *e)

//顺序表的取值(根据位置i获取相应位置数据元素的内容)
char GetElem(SqList L, int i, ElemType *e) {//判断i值是否合理,若不合理,返回ERRORif (i < 1 || i > L.length) {return ERROR;}//第i-1的单元存储这第i个数据*e = L.elem[i - 1];return *e;
}

7.顺序表的查找 LocateElem(SqList L,ElemType e)

//顺序表的查找
//在线性表L中查找与指定值e相同的数据元素的位置
//从表的一端开始,逐个进行记录的关键字和给定值的比较。找到,返回该元素的位置,否则返回0
int LocateElem(SqList L, ElemType e) {//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)int i = 0;for (i = 0; i < L.length; i++) {if (L.elem[i] == e) {return i + 1; //查找成功,返回下标+1;}}return 0; //查找失败,返回0
}

8.顺序表的插入 ListInsert_Sq(SqList *L,int i,ElemType e)

//顺序表的插入
//  线性表的插入运算是指在表的第i(1<=i<=n+1)个位置上,插入一个新节点e,
//使长度为n的线性表变成长度为n+1的线性表//算法思想:
//1 判断插入位置i是否合法。
//2 判断顺序表的存储空间是否存满,若以满返回ERROR。
//3 将第n至第i位的元素依次向后移动一个位置,空出第i个位置。
//4 将要插入的新元素e放入第i个位置
//5 表长加1,插入成功返回OK
Status ListInsert_Sq(SqList *L, int i, ElemType e) {int j = 0;if (i < 1 || i > L->length + 1) {return ERROR;//i值不合法}if (L->length == MAXSIZE) {return ERROR;//当前存储空间已满}for (j = L->length - 1; j >= i - 1; j--) {L->elem[j + 1] = L->elem[j]; //插入位置及之后的元素后移}//将新元素e放入第i个位置L->elem[i - 1] = e;//表长增1L->length++;return OK;
}

9.线性表的删除 ListDelete_Sq(SqList *L,int i)

//顺序表的删除
//  线性表的删除运算是指将表的第i(1<=i<=n)个节点删除
//  使长度为n的线性表
//  变成长度为n-1的线性表//算法思想
//1 判断删除位置i是否合法(合法值为1<=i<=n)
//2 将欲删除的元素保留在e中
//3 将第i+1至第n位的元素依次向前移动一个位置
//4 表长减1,删除成功返回okStatus ListDelete_Sq(SqList *L, int i) {int j = 0;if ((i < 1) || (i > L->length)) {return ERROR; //i值不合法}for (j = i; j < L->length; j++) {//被删除元素之后的元素前移L->elem[j - 1] = L->elem[j];}//表长减1L->length--;return OK;}

10.打印线性表 ListPrint(SqList *L)

//输出线性表
Status ListPrint(SqList *L){int i=0;for(i=0;i<L->length;i++){printf("%c ",L->elem[i]);}printf("\n");return OK;
}

三、代码演示和实验结果

int main() {SqList L;ElemType a;int i=0;InitList_Sq(&L);ListInsert_Sq(&L, 1, 'A');ListInsert_Sq(&L, 2, 'B');ListInsert_Sq(&L, 3, 'C');ListInsert_Sq(&L, 4, 'D');ListInsert_Sq(&L, 5, 'E');printf("%d\n", GetLength(L));printf("%c\n", L.elem[0]);printf("%d\n",LocateElem(L,'B'));GetElem(L, 1, &a);printf("%c\n", a);ListPrint(&L);printf("%d\n", GetLength(L));ListDelete_Sq(&L,2);ListPrint(&L);printf("%d\n", GetLength(L));ClearList(&L);ListPrint(&L);printf("%d\n", GetLength(L));printf("%d\n",IsEmpty(L));return 0;
}

四、顺序表总结

顺序表的优缺点

  • 优点

    1. 存储密度大(结合本身所占存储量/结点结构所占存储量)
    2. 可以随机存取表中任意元素
  • 缺点
    1. 在插入、删除某一元素时,需要移动大量元素
    2. 浪费存储空间
    3. 属于静态存储形式,数据元素的个数不能自由扩充

萌新原创不易,希望各位大佬点个赞 蟹蟹~

用C语言编写顺序存储的线性表(含代码实现)相关推荐

  1. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

  2. c语言用while实现输出加法口诀表,「加法口诀」C语言编写一个加法口诀表 - 金橙教程网...

    加法口诀 C语言编写一个加法口诀表 #include void main(){ int i,j; for(i=1;i<10;i++){ for(j=1;j<=i;j++){ printf( ...

  3. C语言实现数据结构顺序线性表

    大家好,我是胡阳阳 数据结构一直以来都是一门很难的学科 学数据结构时老师总讲的思想和伪代码 对于初学者来说很难写出对应的程序 下面我们来讲解如何才能自己写出顺序线性表的代码 首先顺序线性表是由数组来实 ...

  4. C语言编写一个加法口诀表

    C语言编写一个加法口诀表 代码: #include <stdio.h> void main(){ int i,j; for(i=1;i<10;i++){ for(j=1;j<= ...

  5. educoder数据结构与算法 线性表 第1关:实现一个顺序存储的线性表

    任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt.SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入.删除与查找等功能. 相关知识 线性表 ...

  6. 2.1实现一个顺序存储的线性表(educoder数据结构线性表实训题)

    任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt.SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入.删除与查找等功能. 相关知识 线性表 ...

  7. C语言编写一下棋程序,C语言编写的与电脑下棋程序代码

    C语言编写的与电脑下棋程序代码 C语言编写的与电脑下棋程序代码 #include "stdafx.h" #include using namespace std; void che ...

  8. 恶作剧c语言程序,自己用C语言编写的一个恶作剧小程序代码

    自己用C语言编写的一个恶作剧小程序代码 #include #include #include #define MAX 100 void hebingString(char s1[],char s2[] ...

  9. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

最新文章

  1. 警惕ASP网站Global.asa导致网站被挂马或转向
  2. python模块使用_PYthon模块使用教程(最新).doc
  3. ajax mysql点赞_ajax 实现点赞功能
  4. adg类似于mysql半同步机制_MySQL基准测试异步复制和半同步复制延迟对比
  5. windosw7 Hosts文件的位置
  6. 专卖店荣耀magicbookpro预装系统是Linux,换商家送的U盘里win10系统有影响吗?
  7. matlab liccode,车牌识别的matlab程序--(详细注释,并有使用注意点)
  8. C语言小游戏------贪吃蛇----小白专用
  9. WIFI工具移植之IW工具移植
  10. mysql ipk 编译_OpenWrt的ipk包安装
  11. 将英文转化为二进制黑白码
  12. 7714天,王小川正式卸任搜狗CEO!网友:别了。。。
  13. Android App性能测试| 流量、电量、弱网环境
  14. 笑话理解之Mature
  15. Tribonnbsp;Draftingnbsp;consol…
  16. SpringBoot项目的Liunx服务器部署(一)
  17. 面试官问我new Vue阶段做了什么?
  18. UE5 学习2- 快捷键
  19. python大数据读取分析_python 大数据读取
  20. 操作系统中任务调度的实现

热门文章

  1. PAT——乙级1036:跟奥巴马一起编程 乙级1027:打印沙漏 (有坑)
  2. 压缩的问题-----WriteUp
  3. 采集post传输的数据
  4. 索引器(C# 编程指南)
  5. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)[转]
  6. 【网络安全工程师面试合集】安全角度谈UDP、TCP和DHCP协议
  7. 女神相册密码忘记了,我只用Python写了20行代码
  8. 暴力破解(一)——python脚本暴力破解 加密的zip压缩文件
  9. 同样是数据分析师,他靠“打标签”总被夸,我天天加班取数还被骂
  10. 企业信息化必看,跨国集团采购部门的报表系统是怎样的