c语言|【小白】线性表的顺序存储结构的实现(C语言)

@【TOC】(目录)第一章:线性表
【c语言|【小白】线性表的顺序存储结构的实现(C语言)】
文章目录

  • 前言
  • 一、数据结构是什么?
  • 二、线性表的顺序存储方式的实现
    • 1.实现所需的主要函数
    • 2.常量定义
    • 3.定义结构体
    • 4.实现
      • 4.1初始化,构建新的线性表
      • 4.2销毁线性表
      • 4.3判断线性表是否为空
      • 4.4获取线性表长度
      • 4.5获取线性表中第i个元素,并将值返回给e
      • 4.6在线性表的第i个位置插入元素e
      • 4.7在线性表中删除第i个位置的元素
      • 4.8查找顺序表中与给定值e相等的元素,若成功则返回该元素在表中的位置,否则返回0
      • 4.8获取线性表中的所有元素
  • 总结
  • 【小白】线性表的顺序存储结构的实现(C语言)
  • 下一节:线性表的链式存储结构的实现

前言 数据结构作为计算机系的最重要课程是计算机系学生必修课,我们需要引起足够的重视。希望能够把自己的代码分享给有需要的同学们,一起进步。实现语言为C语言,发博客之前已检查了能否运行成功。
学习教材:数据结构(C语言版)-严蔚敏 吴伟民
代课教师:呼克佑(太原理工大学讲师)
作者简介: 中部某末流211软院大二学生

一、数据结构是什么?
数据结构是计算机存储、组织数据的方式
二、线性表的顺序存储方式的实现 1.实现所需的主要函数
int InitList(SqList *L); int DestroyList(SqList *L); int ListEmpty(SqList L); int ListLength(SqList L); int GetElem(SqList L, int i, int *e); int ListInsert(SqList *L, int i, int e); int ListDelete(SqList *L, int i, int *e); intLocateElem(SqList L,int e); void GetElems(SqList L);

2.常量定义
#define LIST_SIZE 10 #define OVERFLOW 1 #define OK 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 #define ERROR 0

3.定义结构体
typedef struct SqList{int*data; int length; };

4.实现 4.1初始化,构建新的线性表
int InitList(structSqList *L){L->data = https://www.it610.com/article/(int *) malloc(sizeof(int) * LIST_SIZE); //申请内存不成功 if(!L->data) return ERROR; L->length = 0; return OK; }

4.2销毁线性表
int DestroyList(struct SqList *L){free(L->data); L->length = 0; L->data = https://www.it610.com/article/NULL; return OK; }

4.3判断线性表是否为空
int ListEmpty(struct SqList L){if(L.length < 1) return TRUE; else return FALSE; }

4.4获取线性表长度
int ListLength(struct SqList L){return L.length; }

4.5获取线性表中第i个元素,并将值返回给e
int GetElem(struct SqList L, int i,int *e){if(i < 1 ||i > L.length ) return ERROR; *e = L.data[i-1]; return OK; }

4.6在线性表的第i个位置插入元素e
//将第i个位置以后的元素依次都往后移一个单位空间,将e插入第i个位置 int ListInsert(struct SqList *L, int i, int e){if(i < 1 || i > L->length + 1) return ERROR; for(int j = i-1; j length-1; j++) L->data[j+1] = L->data[j]; L->data[i-1] = e; L->length++; return OK; }

4.7在线性表中删除第i个位置的元素
//将i+1个以后的元素依次向前移一个单位空间 int ListDelete(struct SqList *L, int i,int *e){if(i < 1 || i > L->length) return ERROR; *e = L->data[i-1]; for(int j = L->length-1; j > L->length-1; j--) L->data[j-1] = L->data[j]; L->length--; return OK; }

4.8查找顺序表中与给定值e相等的元素,若成功则返回该元素在表中的位置,否则返回0
intLocateElem(struct SqList L,int e){int i; for(i = 0; i < L.length; i++) if(L.data[i] == e) return i+1; return 0; }

4.8获取线性表中的所有元素
void GetElems(SqList L){for(int i = 1; i <= L.length; i++) printf("线性表中第%d个元素是%d\n",i,L.data[i-1]); }

总结
线性表的顺序存储结构优点:随机存取 缺点:不适用频繁的插入和删除,效率不高,时间复杂度O(n)

【小白】线性表的顺序存储结构的实现(C语言) 下一节:线性表的链式存储结构的实现

    推荐阅读