C语言数据结构(3)--顺序存储线性表

简介: 本文目录0. 系列文章索引1. 顺序存储线性表的概念2. 有哪些操作3. 代码实现

0. 系列文章索引

点此查看系列文章


1. 顺序存储线性表的概念

线性表简单的说就是有序的元素集合,像Java里面的List。


数组其实就是一个简单的线性表,但是更多的只能代表线性表的一种存储结构,如果是一个完善的线性表的话,还应该包括删除元素、查询元素、修改元素等操作。


线性表的存储结构最常见的有两大类,一个是用一维数组,一个使用链表,本篇演示一维数组实现的线性,即顺序存储线性表;链表实现的线性表可以称之链式存储线性表。


2. 有哪些操作

显示线性表元素个数

展示线性表的所有元素

获取指定位置元素

在指定位置插入元素

删除指定位置元素

清空线性表

大体上常用的也就这些操作了,下面我们来具体实现下。


3. 代码实现

/*
* 顺序存储线性表
* 作者:熊猫大大
* 时间:2019-09-22
*/
#include<stdio.h>
#define MAXSIZE 100 //最大元素个数
// 线性表的结构体
typedef struct {
  int data[MAXSIZE];
  int count;//当前元素个数
}SequenceList;
// 获取元素个数
int getCount(SequenceList *list)
{
  return list->count;
}
// 显示所有元素
void printList(SequenceList *list)
{
  int i;
  printf("\n所有元素:");
  for (i = 0; i < list->count; i++)
  {
    printf("%d", list->data[i]);
  }
}
// 获取指定位置元素,返回值放入result指向元素
int getData(SequenceList *list, int index, int *result)
{
  if (index<0 || index>list->count - 1)
  {
    return 0;//0表示失败
  }
  *result = list->data[index];
  return 1;//1表示成功
}
// 插入元素
int insertData(SequenceList *list, int index, int input)
{
  int i;
  if (list->count >= MAXSIZE) //满了
  {
    return 0;
  }
  if (index<0 || index>list->count) //不在合理范围
  {
    return 0;
  }
  if (index != list->count) //插入数据不在表尾
  {
    for (i = list->count; i >= index; i--)
    {
      list->data[i] = list->data[i - 1];
    }
  }
  list->data[index] = input;
  list->count++;
  return 1;
}
// 删除指定位置元素
int deleteData(SequenceList *list, int index)
{
  int i;
  if (index<0 || index>list->count - 1) //不在合理范围
  {
    return 0;
  }
  for (i = index; i < list->count - 1; i++)
  {
    list->data[i] = list->data[i + 1];
  }
  list->count--;
  return 1;
}
// 清空所有元素
int clearData(SequenceList *list)
{
  list->count = 0;
}
// 程序入口
int main()
{
  //初始化
  SequenceList sequenceList;
  SequenceList *list = &sequenceList;
  list->count = 0;
  //插入元素
  insertData(list, 0, 1);
  insertData(list, 1, 2);
  insertData(list, 2, 3);
  printList(list);
  //获取元素
  int result = -1;
  getData(list, 1, &result);
  printf("\ngetData:%d", result);
  //删除指定位置元素
  deleteData(list, 1);
  printList(list);
  //清空元素
  clearData(list);
  printList(list);
  printf("\n");
  return 1;
}
相关文章
|
1天前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构
6 0
|
2天前
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
|
2天前
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
|
2天前
|
存储 JSON NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
|
2天前
|
存储 缓存 NoSQL
Redis为什么速度快:数据结构、存储及IO网络原理总结
Redis为什么速度快:数据结构、存储及IO网络原理总结
|
2天前
|
存储 算法 Java
Java数据结构与算法:用于高效地存储和检索字符串数据集
Java数据结构与算法:用于高效地存储和检索字符串数据集
|
2天前
|
存储 Python
Python中使用列表和字典来存储和处理复杂的数据结构
Python中使用列表和字典来存储和处理复杂的数据结构
|
3天前
|
存储 C语言
【海贼王编程冒险 - C语言海上篇】C语言中的数据类型有哪些?又是如何存储?
【海贼王编程冒险 - C语言海上篇】C语言中的数据类型有哪些?又是如何存储?
6 0
|
3天前
|
存储 算法 搜索推荐
【数据结构和算法】--- 基于c语言排序算法的实现(2)
【数据结构和算法】--- 基于c语言排序算法的实现(2)
4 0
|
3天前
|
存储 缓存 前端开发
【数据结构/C语言】深入理解 双向链表
【数据结构/C语言】深入理解 双向链表