大话数据结构 01 :顺序线性表
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 :顺序线性表相关推荐
- Algorithms_基础数据结构(01)_线性表之数组数组的应用案例分析
文章目录 大纲图 数组的经典面试题目 数据结构三要素 数据逻辑结构(线性结构&非线性结构) 数据存储结构(顺序存储.链式存储.索引存储和散列存储) 顺序存储 链式存储 索引存储 散列存储 数据 ...
- 【数据结构】顺序线性表的构造和存储数据
这是一个很简单的程序,但是写的过程中费了好大劲,主要是因为道行不深. ①:构造线性表: 1 typedef struct 2 { 3 int elem[maxsize]; 4 int last; 5 ...
- 【数据结构】除去线性表中的重复数字
题目:写一个算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同. 刚看到这个题目给我第一个思路是冒泡排序,可以利用冒泡排序的两层循环找出相同的结点,然后free掉.第一层循环是控制循环的 ...
- 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)
前面说的话 提到数据结构,最出名的恐怕还是四大基本结构,分别是集合,线性结构,树形结构和图形结构. 本人只是一名普普通通的本科学生,学的东西比较基础,甚至有可能比较落伍,但作为所有国内高等学府相关专业 ...
- C语言实现数据结构顺序线性表
大家好,我是胡阳阳 数据结构一直以来都是一门很难的学科 学数据结构时老师总讲的思想和伪代码 对于初学者来说很难写出对应的程序 下面我们来讲解如何才能自己写出顺序线性表的代码 首先顺序线性表是由数组来实 ...
- 大话西游之王道考研数据结构第一讲---线性表的顺序表示
大话西游之王道考研数据结构第一讲---线性表的顺序表示 写在前面的话 王道考研数据结构是一本非常好的书,本系列所有的内容是按照其书进行讲述的,所以您可以以那本书作为主要内容,这个做参考. 大学时候,在 ...
- 数据结构之线性表:顺序线性表 Java 实现(底层基于数组)
代码实现 package top.gldwolf.java.datastructure.lineartable;/*** 顺序线性表* @param <T> 存储的元素类型*/ publi ...
- 数据结构二:线性表的顺序结构实现
此程序根据高一凡大神的源程序修改而成. /************************************************************* FileName:c2-1.h F ...
最新文章
- Linux安装Oracle 10g
- Java元组Tuple使用实例--转载
- AndroidStudio报错:Emulator: I/O warning : failed to load external entity file:/C:/Users/Administrator
- Python爬虫常用模块
- 华为服务器双系统教程,服务器上安装双系统
- linux宝塔登录不上去怎么回事,宝塔面板点击登陆没有用怎么办
- 同步工具类CyclicBarrier原理及使用
- 需要显卡还是cpu_装机应该在哪个硬件上省钱, CPU还是显卡, 看完本文就知道了...
- Win10错误代码0x80070541是怎么回事
- 剑指offer——面试题51:数组中重复的数字
- 《延禧攻略》的配色,简直美到爆!
- CentOS 7下安装svn版本访问工具rabbitvcs
- 湖南计算机office三月份,2020年3月计算机二级MS Office考试怎么准备
- 用js超简单判断图片地址是否存在(404问题)
- Processing介绍及几个python模式下的案例
- CeSi 安装与配置
- JMeter5.0的脚本录制
- Android SystemUI相关定制(一)
- goproxy.io for Go modules
- SpringBoot整合Thymeleaf模板引擎以及静态资源的访问