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;
}
相关文章
|
28天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
45 1
|
1月前
|
存储 算法 搜索推荐
【趣学C语言和数据结构100例】91-95
本文涵盖多个经典算法问题的C语言实现,包括堆排序、归并排序、从长整型变量中提取偶数位数、工人信息排序及无向图是否为树的判断。通过这些问题,读者可以深入了解排序算法、数据处理方法和图论基础知识,提升编程能力和算法理解。
49 4
|
1月前
|
存储 机器学习/深度学习 搜索推荐
【趣学C语言和数据结构100例】86-90
本文介绍并用C语言实现了五种经典排序算法:直接插入排序、折半插入排序、冒泡排序、快速排序和简单选择排序。每种算法都有其特点和适用场景,如直接插入排序适合小规模或基本有序的数据,快速排序则适用于大规模数据集,具有较高的效率。通过学习这些算法,读者可以加深对数据结构和算法设计的理解,提升解决实际问题的能力。
45 4
|
1月前
|
存储 算法 数据处理
【趣学C语言和数据结构100例】81-85
本文介绍了五个经典算法问题及其C语言实现,涵盖图论与树结构的基础知识。包括使用BFS求解单源最短路径、统计有向图中入度或出度为0的点数、统计无向无权图各顶点的度、折半查找及二叉排序树的查找。这些算法不仅理论意义重大,且在实际应用中极为广泛,有助于提升编程能力和数据结构理解。
46 4
|
1月前
|
算法 数据可视化 数据建模
【趣学C语言和数据结构100例】76-80
本文介绍了五种图论算法的C语言实现,涵盖二叉树的层次遍历及广度优先搜索(BFS)和深度优先搜索(DFS)的邻接表与邻接矩阵实现。层次遍历使用队列按层访问二叉树节点;BFS利用队列从源节点逐层遍历图节点,适用于最短路径等问题;DFS通过递归或栈深入图的分支,适合拓扑排序等场景。这些算法是数据结构和算法学习的基础,对提升编程能力和解决实际问题至关重要。
52 4
|
1月前
|
存储 算法 vr&ar
【趣学C语言和数据结构100例】71-75
本文介绍了五个C语言数据结构问题及其实现,涵盖链表与二叉树操作,包括按奇偶分解链表、交换二叉树左右子树、查找节点的双亲节点、计算二叉树深度及求最大关键值。通过递归和遍历等方法,解决了理论与实际应用中的常见问题,有助于提升编程能力和数据结构理解。
43 4
|
1月前
|
存储 算法 C语言
【趣学C语言和数据结构100例】66-70
本书《趣学C语言和数据结构100例》精选了5个典型的数据结构问题及C语言实现,涵盖链表与数组操作,如有序集合的集合运算、有序序列表的合并、数组中两顺序表位置互换、三递增序列公共元素查找及奇偶数重排。通过详细解析与代码示例,帮助读者深入理解数据结构与算法设计的核心思想,提升编程技能。
36 4
|
1月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
55 5
|
28天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
62 1
|
1月前
|
存储 机器学习/深度学习 算法
【趣学C语言和数据结构100例】61-65
本文介绍了五个关于C语言和数据结构的经典问题及其实现方法,涵盖查找链表共同后缀、删除重复节点、重新排列链表元素、合并有序链表以及特定条件下的链表排序。每个问题通过具体的算法设计,不仅展示了链表操作的灵活性,还强调了效率优化的重要性。通过这些问题的探讨,读者可以深入理解链表的基本操作和高级应用,提升解决实际问题的能力。
54 4