当前位置: 首页 > news >正文

数据结构实战之线性表(一)

一.线性表的定义和特点

  1. 线性表的定义

  • 线性表是一种数据结构,它包含了一系列具有相同特性的数据元素,数据元素之间存在着顺序关系。例如,26个英文字母的字符表 ( (A, B, C, ....., Z) ) 就是一个线性表,其中每个字母就是一个数据元素。
  • 在线性表中,每个数据元素可以包含若干个数据项。例如,学生基本信息表中的每个学生可以视为一个数据元素,而这些元素包括学号、姓名、性别、籍贯、专业等数据项。
  • 2.线性表的特性

  • 在线性表中,虽然每个数据元素可能不同,但是它们都属于同一数据对象,具有相同的特性,且相邻的数据元素之间具有一定的顺序关系。
  • 3.线性表的长度与空表

  • 线性表的长度由元素的个数 n 决定(n ≥ 0),如果 n = 0 ,则称该线性表为“空表”。
  • 4.线性表(或线性结构)的特征

  • 存在唯一的一个数据元素被称为“第一个”。
  • 存在唯一的一个数据元素被称为“最后一个”。
  • 除第一个元素外,结构中的每个数据元素都有且只有一个前驱。
  • 除最后一个元素外,结构中的每个数据元素都有且只有一个后继。

学习更多嵌入式电子知识,C语言编程技术,欢迎抖音扫码关注

二.线性表之顺序表实现

1.项目结构以及初始代码

初始代码

main.c

#include <stdio.h>int main(int argc, char** argv)
{return 0;
}

SeqList.h

#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include <stdio.h>#define SEQLIST_INIT_SIZE 8 // 顺序表初始大小typedef int ElemType;typedef struct SeqList
{ElemType* base;// 指向顺序表空间int capacity;// 顺序表容量int size;// 顺序表长度(元素个数)
}SeqList;#endif // !__SEQLIST_H__

SeqList.c

#include "SeqList.h"

2.顺序表初始化

SeqList.h

#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include <stdio.h>
#include <malloc.h>
#include <assert.h>#define SEQLIST_INIT_SIZE 8 // 顺序表初始大小typedef int ElemType;typedef struct SeqList
{ElemType* base;// 指向顺序表空间int capacity;// 顺序表容量int size;// 顺序表长度(元素个数)
}SeqList;void InitSeqList(SeqList* list);#endif // !__SEQLIST_H__

main.c

#include <stdio.h>
#include "SeqList.h"int main(int argc, char** argv)
{SeqList mylist;InitSeqList(&mylist);return 0;
}

SeqList.c

#include "SeqList.h"void InitSeqList(SeqList* list)
{list->base = (ElemType*)malloc(sizeof(ElemType) * SEQLIST_INIT_SIZE);assert(list->base != NULL);list->capacity = SEQLIST_INIT_SIZE;list->size = 0;
}

3.顺序表操作代码框架

main.c

#include <stdio.h>
#include "SeqList.h"int main(int argc, char** argv)
{SeqList mylist;InitSeqList(&mylist);// 顺序表操作的选择int select = 1;while (select){printf("*********************************************\n");printf("* [1]  push_back         [2]  push_front    *\n");printf("* [3]  show_list         [4]  pop_back      *\n");printf("* [5]  pop_front         [6]  insert_pos    *\n");printf("* [7]  find              [8]  length        *\n");printf("* [9]  delete_pos        [10]  delete_val    *\n");printf("* [11] sort              [12] reverse       *\n");printf("* [13] clear             [14] destroy       *\n");printf("* [0]  quit_system                          *\n");printf("*********************************************\n");printf("请选择:>");scanf("%d", &select);if (select == 0){break;}switch (select){case 1:{break;}case 2:{break;}case 11:{break;}default:{printf("输入的选择错误,请重新输入!\n");break;}}}return 0;
}

注意:在visual studio2022中,使用scanf()函数获取输入,然后运行项目会报错:

解决方式:

重新运行项目,就不会报错了。

如果你喜欢这篇文章,别忘了收藏点赞关注,支持我们为您带来更多精彩内容!❤️🎉

动动手指,做起来吧! 👨‍💻👩‍💻,

后面我们还将一起讨论学习:序表尾部插入数据并显示顺序表头部插入数据顺序表尾部删除数据顺序表头部删除数据顺序表指定位置插入数据顺序表中查找指定的数据是否存在顺序表的长度顺序表按位置删除数据顺序表按值删除数据。。。。。。等等!

http://www.lryc.cn/news/529595.html

相关文章:

  • jdk8项目升级到jdk17——岁月云实战
  • 商品列表及商品详情展示
  • 使用where子句筛选记录
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)
  • C++中常用的十大排序方法之4——希尔排序
  • 扶摇计划--从失业的寒冬,慢慢的走出来
  • unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
  • [cg] 使用snapgragon 对UE5.3抓帧
  • 一元函数微积分的几何应用:二维平面光滑曲线的曲率公式
  • ISBN 号码——蓝桥杯
  • Spring Boot - 数据库集成06 - 集成ElasticSearch
  • 51单片机CLD1602显示万年历+闹钟+农历+整点报时
  • C++ 中的类(class)和对象(object)
  • 安卓通过网络获取位置的方法
  • 2025 年,链上固定收益领域迈向新时代
  • npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
  • 11.QT控件:输入类控件
  • deepseek核心技术:MLA架构-多头潜在注意力
  • 讯飞星火大模型API使用Python调用
  • C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?
  • Elasticsearch:如何搜索含有复合词的语言
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化
  • idea maven本地有jar包,但还要从远程下载
  • C++编程语言:抽象机制:模板(Bjarne Stroustrup)
  • 深入解析 Linux 内核中的页面错误处理机制
  • 【AIGC专栏】AI在自然语言中的应用场景
  • Ubuntu 20.04安装Protocol Buffers 2.5.0
  • 解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路
  • 计算机组成原理——数据运算与运算器(二)
  • SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇