顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

对于表,栈,队列,树,图等等数据结构,我们都可通过选择顺序结构或者链式结构来进行实现,下面就演示一下表的顺序实现。

因为这个太过简单所以就直接上代码

数据结构

typedef struct SeqList
{DATATYPE* data; // 指向动态开辟的数组size_t size;    // 有效数据个数size_t capicity;  // 容量空间的大小
}SeqList;

实现的接口

void SeqListInit(SeqList* list, size_t capacity);
//顺序表初始化
int CheckCapacity(SeqList* list);
//检查顺序表是否已满,如果满了进行扩容
void SeqListDestory(SeqList* list);
//销毁顺序表
void SeqListPrint(SeqList* list);
//打印顺序表
void SeqListPushBack(SeqList* list, DATATYPE x);
//尾插
void SeqListPushFront(SeqList* list, DATATYPE x);
//头插
int SeqListFind(SeqList* list, DATATYPE x);
//查找顺序表
void SeqListPopBack(SeqList* list);
//尾删
void SeqListPopFront(SeqList* list);
//尾插
void SeqListInsert(SeqList* list, size_t pos, DATATYPE x);
//指定位置插入
void SeqListErase(SeqList* list, size_t pos);
//指定位置删除

顺序表的初始化

void SeqListInit(SeqList* list, size_t capacity)
{assert(list);DATATYPE* temp;temp = (DATATYPE*)malloc(capacity * sizeof(DATATYPE));if (NULL == list){printf("初始化失败\n");return;}list->data = temp;list->size = 0;list->capicity = capacity;
}

顺序表的销毁

void SeqListDestory(SeqList* list)
{assert(list);list->size = 0;list->capicity = 0;free(list->data);list->data = NULL;
}

检查顺序表是否已满,如果满了自动扩容

int CheckCapacity(SeqList* list)
{assert(list);DATATYPE* temp;if (list->capicity == list->size){temp = realloc(list, 2 * LISTSIZE * sizeof(DATATYPE));if (NULL == temp){printf("增容失败\n");return 0;}else{list->data = temp;printf("增容成功\n");}}return 1;
}

打印顺序表

void SeqListPrint(SeqList* list)
{assert(list);size_t i = 0;for (i = 0; i < list->size; i++){printf("%d ", list->data[i]);}printf("\n");
}

头插

void SeqListPushFront(SeqList* list, DATATYPE x)
{assert(list);int i;if (!CheckCapacity(list)){printf("顺序表已满\n");return;}for (i = list->size; i > 0; i--){list->data[i] = list->data[i - 1];}list->data[0] = x;list->size++;
}

尾插

void SeqListPushBack(SeqList* list, DATATYPE x)
{assert(list);if (!CheckCapacity(list)){printf("顺序表已满\n");return;}list->data[list->size++] = x;}

头删

void SeqListPopFront(SeqList* list)
{assert(list);size_t i;if (list->size == 0){printf("表已空\n");return;}for (i = 0; i < list->size - 1; i++){list->data[i] = list->data[i + 1];}list->size--;
}

尾插

void SeqListPopBack(SeqList* list)
{assert(list);if (list->size == 0){printf("表已空\n");return;}list->size--;
}

顺序表查找

int SeqListFind(SeqList* list, DATATYPE x)
{assert(list);size_t i;for (i = 0; i < list->size; i++){if (x == list->data[i]){printf("查找成功\n");return i;}}printf("查找失败\n");return -1;
}

在Pos位置插入

void SeqListInsert(SeqList* list, size_t pos, DATATYPE x)
{assert(list);int i = 0;if (!CheckCapacity(list)){printf("顺序表已满\n");return;}for (i = (int)list->size; i > pos -1; i--){list->data[i] = list->data[i - 1];}list->data[pos - 1] = x;list->size++;
}

在Pos位置删除

void SeqListErase(SeqList* list, size_t pos)
{assert(list);size_t i;if (list->size == 0){printf("表已空\n");return;}for (i = pos - 1; i < list->size - 1; i++){list->data[i] = list->data[i + 1];}list->size--;
}

数据结构与算法 | 顺序表相关推荐

  1. 数据结构与算法顺序表数组版

    博主还在学校,写网络编程特别是后面的线程和多路I/O实在是太费精力,所以博主先把数据结构多跟新一点,也正好把学校的C语言数据结构的作业做了,正好一举两得 这个内容比较简单,就不再细说. #includ ...

  2. python与js通用的数据结构_五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)...

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...

  3. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList {//1. initList(&L):初始化表.构造一个空的线性表.放回值应该是一 ...

  4. 数据结构与算法-4-链表的基本操作-增

    数据结构与算法-4-链表的基本操作-增 注意:以下为顺序存储结构实现 相关的头文件 /*以下为头文件SqList.h是用于定义相关函数的头文件*/ #pragma once #define LIST_ ...

  5. [小森数据结构]看电影-顺序表技术精讲

    故事前研(言) 小森去看电影<<流浪地球2>>的时候买电影票的场景. 突然一个叫高启强的人买电影票 拉了两个Hei友,来看电影 <<流浪地球2>> 当场 ...

  6. 数据结构之——《顺序表》

    数据结构之--<顺序表> 1.含义 2.分类 3.接口函数实现 4.顺序表的优缺点 1.含义 顺序表示用一段纹理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组 ...

  7. 数据结构与算法-2-链表的基本操作-查找

    数据结构与算法-2-链表的基本操作-查找(c语言) 本文是单链表的C语言实现方法,包括单链表的创建.插入.删除.修改.查找等基本操作. 链表结点的类型定义 /*链式存储结构的头结点*/ typedef ...

  8. 【数据结构】【顺序表】 SqList *L与SqList*L的区别

    [数据结构][顺序表] SqList *&L与SqList*L的区别 显然,对于顺序表的抽象数据模型中的函数,其参数使用各不相同. SqList *&L的情况 它的意思是,L是对Lis ...

  9. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

最新文章

  1. 北京学python去哪里好_北京想学习Python应该去哪里好
  2. c++ 终止 超时_C++ 哪里超时了啊?
  3. 在Jira停售后,你决定赌Atlassian Data Center?
  4. springboot2 war页面放在那_Spring Boot2 系列教程(三十三)整合 Spring Security
  5. 双系统XP和ubuntu,升级ubuntu出现no such device grub rescue
  6. 【Cocosd2d实例教程五】Cocos2d添加虚拟摇杆控制器
  7. 如何调整金格电子章服务器印章_如何利用OA系统进行电子公章、红头文件及打印的管理...
  8. MySQL索引背后的数据结构及算法原理zz
  9. 计算机系统基础:程序与运算
  10. 苹果怎么关闭系统自动更新_你经过我的同意了吗?论手机系统自动更新
  11. 大连交通大学计算机网络作业,计算机网络题库(大连交通大学)chapter4
  12. 实施云计算之后如何保证安全
  13. 阿里舆情︱舆情热词分析架构简述(Demo学习)
  14. Windows中安装ElasticSearch(单机+集群+Kibana)
  15. Cadence Allegro Segments Over Voids 功能介绍图文教程
  16. IE(11)浏览器清理缓存方法
  17. 今晚8:00 | CEI Lab 软硬件协同优化专题,顶会MICRO最佳论文作者来啦
  18. 如何用Java写出热门大鱼吃小鱼游戏
  19. python双击py一闪_python双击py一闪 python编程
  20. 前端学习之浏览器从输入URL到页面加载的全过程

热门文章

  1. Zuul路由的strip-prefix与order
  2. 计算机游戏和传统游戏的区别是什么,电竞显示器与普通显示器有什么区别-电脑自学网...
  3. mongodb java连接 集群_java连接mongodb集群
  4. java 发送邮件昵称_javaMail发送邮件设置发件人中文昵称
  5. koa-mysql(三)
  6. Linux系统管理初步(七)系统服务管理、chkconfig与systemd 编辑中
  7. StackOverflow 每月5.6亿PV,但只用25台服务器
  8. Java Streams,第 4 部分: 从并发到并行
  9. Python学习总结18:函数 参数篇
  10. vs2013如何选择一个solution中的project来运行