1、完整代码


#include "stdio.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0#define MAXSIZE 20 //存储空间分配量 typedef int Status;
typedef int ElemType;//打印出所访问的字符
Status visit(ElemType c)
{printf("%d ", c);return OK;
}typedef struct
{ElemType data[MAXSIZE];         //定义了一个固定大小的数组int length;           // 线性表当前长度
}SqList;//初始化顺序线性链表
Status InitList(SqList* L)
{L->length = 0;return OK;
}//判断线性表是否为空
Status ListEmpty(SqList L)
{if (L.length == 0)return TRUE;elsereturn FALSE;
}// 将L重置为空表
Status ClearList(SqList* L)
{L->length = 0;return OK;
}//列表长度
int ListLength(SqList L)
{return L.length;
}// 返回数组中第i个元素的位置
Status GetELem(SqList L, int i, ElemType* e)
{if (L.length == 0 || i < 1 || i > L.length)return ERROR;*e = L.data[i - 1];return OK;
}// 返回数组中的第一个元素e的位置
// 否则返回 0
int locateElem(SqList L, ElemType e)
{for (int i = 0; i < L.length; i++){if (L.data[i] == e)return i + 1;}return 0;
}// 在第i个位置插入新的元素 e
// 数组长度加1
Status ListInsert(SqList* L, int i, ElemType e)
{int k;if (L->length == MAXSIZE) // 顺序线性表已满return ERROR;if (i < 1 || (i > L->length + 1)) //当插入的位置比第一位置小或者比最后一个位置大 都要报错return ERROR;if (i <= L->length) //若插入的数据不在表尾{for (int k = L->length - 1; k >= i - 1; k--) //将要插入的位置及之后位置的数据后移L->data[k + 1] = L->data[k];}L->data[i - 1] = e;L->length++; //线性表长度加1return OK;
}// 删除第i个元素 并用e返回其值
Status ListDelete(SqList* L, int i, ElemType* e)
{int k;if (L->length == 0)return ERROR;if (i < 1 || i>L->length)return ERROR;*e = L->data[i - 1];if (i < L->length) // 如果删除不是最后位置,将所有元素前移{for (int k = i; k < L->length; k++){L->data[k - 1] = L->data[k];}}L->length--; //线性表长度减1return OK;
}// 依次对每个数据输出
Status ListTraverse(SqList SL)
{for (int i = 0; i < SL.length; i++){visit(SL.data[i]);}printf("\n");return OK;
}//
void unionL(SqList* La, SqList Lb)
{int La_len;int Lb_len;ElemType e;La_len = ListLength(*La);Lb_len = ListLength(Lb);for (int i = 1; i <= Lb_len; i++){GetELem(Lb, i, &e);if (!locateElem(*La, e)){ListInsert(La, ++La_len, e); //这里可能是 La_len ++ }}
}// 测试代码
int main()
{SqList L;SqList Lb;ElemType e;Status i;int j;int k;i = InitList(&L);printf("初始化L后: L.length = %d\n", L.length);for (int j = 1; j <= 5; j++){i = ListInsert(&L, 1, j);}printf("在L的表头依次插入1~5后,L.data= ");ListTraverse(L);printf("L.length = %d \n", L.length);i = ListEmpty(L);printf("L是否空: i = %d(1:是 0:否)\n", i);i = ClearList(&L);printf("清空L后:L.length=%d\n", L.length);i = ListEmpty(L);printf("L是否空,i = %d(1:是,0:否) \n", i);for (j = 1; j <= 10; j++){ListInsert(&L, j, j);}printf("在L的表尾依次插入1~10后:L.data=");ListTraverse(L);printf("L.length = %d \n", L.length);ListInsert(&L, 1, 0);printf("在L的表头插入0后:L.data = ");ListTraverse(L);printf("L.length = %d \n", L.length);GetELem(L, 5, &e);printf("第5个元素的值为:%d\n", e);for (int j = 3; j <= 4; j++){int k = locateElem(L, j);if (k)printf("第%d个元素的值为%d \n", k, j);elseprintf("没有值为%d的元素", j);}int K = ListLength(L); for (int j = K + 1; j >= K; j--){int i = ListDelete(&L, j, &e); //删除第j个元素//if (i == ERROR)printf("删除第%d个数据失败 \n", j);elseprintf("删除第%d个元素的值为 %d \n", j, e);}printf("依次输出L的元素:");ListTraverse(L);j = 5;ListDelete(&L, j, &e); /* 删除第5个数据 */printf("删除第%d个元素值为:%d\n", j, e);printf("依次输出L的元素:");ListTraverse(L);//构造一个有10的线性表i = InitList(&Lb);for (int j = 6; j <= 15; j++){int i = ListInsert(&Lb, 1, j);}unionL(&L, Lb);//合并到Lprintf("依次输出合并了Lb的元素");ListTraverse(L);return 0;}

大话数据结构 01 :顺序线性表相关推荐

  1. Algorithms_基础数据结构(01)_线性表之数组数组的应用案例分析

    文章目录 大纲图 数组的经典面试题目 数据结构三要素 数据逻辑结构(线性结构&非线性结构) 数据存储结构(顺序存储.链式存储.索引存储和散列存储) 顺序存储 链式存储 索引存储 散列存储 数据 ...

  2. 【数据结构】顺序线性表的构造和存储数据

    这是一个很简单的程序,但是写的过程中费了好大劲,主要是因为道行不深. ①:构造线性表: 1 typedef struct 2 { 3 int elem[maxsize]; 4 int last; 5 ...

  3. 【数据结构】除去线性表中的重复数字

    题目:写一个算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同. 刚看到这个题目给我第一个思路是冒泡排序,可以利用冒泡排序的两层循环找出相同的结点,然后free掉.第一层循环是控制循环的 ...

  4. 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...

    1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...

  5. c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)

    前面说的话 提到数据结构,最出名的恐怕还是四大基本结构,分别是集合,线性结构,树形结构和图形结构. 本人只是一名普普通通的本科学生,学的东西比较基础,甚至有可能比较落伍,但作为所有国内高等学府相关专业 ...

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

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

  7. 大话西游之王道考研数据结构第一讲---线性表的顺序表示

    大话西游之王道考研数据结构第一讲---线性表的顺序表示 写在前面的话 王道考研数据结构是一本非常好的书,本系列所有的内容是按照其书进行讲述的,所以您可以以那本书作为主要内容,这个做参考. 大学时候,在 ...

  8. 数据结构之线性表:顺序线性表 Java 实现(底层基于数组)

    代码实现 package top.gldwolf.java.datastructure.lineartable;/*** 顺序线性表* @param <T> 存储的元素类型*/ publi ...

  9. 数据结构二:线性表的顺序结构实现

    此程序根据高一凡大神的源程序修改而成. /************************************************************* FileName:c2-1.h F ...

最新文章

  1. Linux安装Oracle 10g
  2. Java元组Tuple使用实例--转载
  3. AndroidStudio报错:Emulator: I/O warning : failed to load external entity file:/C:/Users/Administrator
  4. Python爬虫常用模块
  5. 华为服务器双系统教程,服务器上安装双系统
  6. linux宝塔登录不上去怎么回事,宝塔面板点击登陆没有用怎么办
  7. 同步工具类CyclicBarrier原理及使用
  8. 需要显卡还是cpu_装机应该在哪个硬件上省钱, CPU还是显卡, 看完本文就知道了...
  9. Win10错误代码0x80070541是怎么回事
  10. 剑指offer——面试题51:数组中重复的数字
  11. 《延禧攻略》的配色,简直美到爆!
  12. CentOS 7下安装svn版本访问工具rabbitvcs
  13. 湖南计算机office三月份,2020年3月计算机二级MS Office考试怎么准备
  14. 用js超简单判断图片地址是否存在(404问题)
  15. Processing介绍及几个python模式下的案例
  16. CeSi 安装与配置
  17. JMeter5.0的脚本录制
  18. Android SystemUI相关定制(一)
  19. goproxy.io for Go modules
  20. SpringBoot整合Thymeleaf模板引擎以及静态资源的访问

热门文章

  1. XCTF-高手进阶区:NewsCenter
  2. cmd下pip安装mysql_pip安装MySQLpython
  3. vue中使用 i18n 遇到的问题
  4. 透明轮播原生JavaScript实现
  5. vue-awesome-swiper使用
  6. element ui表单验证
  7. 使用vue控制元素显示隐藏
  8. Springboot-data-jpa
  9. Spring中的事件机制
  10. ML的BD框架-Hadoop.Mahout.Strom.Spark/GraphLab