1. 什么是线性结构
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。
2. 线性结构中都包含什么内容?
顺序表、链表、栈、队列、字符串
3. 什么是顺序表?顺序表的分类?
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。
顺序表一般可以分为:

  1. 静态顺序表:使用定长数组存储。
  2. 动态顺序表:使用动态开辟的数组存储。

4.顺序表的基本操作
这一段为该项目的h文件,注明拥有的函数,本函数实现了排序各种插入和删除,以及自动扩容

#pragma once
typedef int DataType;
//动态
typedef struct SeqList{DataType *_array;int _capacity; //顺序表中有效元素总个数int _size;   //实际存的元素
}SeqList,*PSeq;
//void SeqListlnit(SeqList 8)
void SeqListInit(PSeq ps, int capacity);  //顺序表的初始化
void SeqListPushBack(PSeq ps, DataType data);//尾部插入
void SeqListPopBack(PSeq ps);//尾部删除函数
void SeqListPushFront(PSeq ps, DataType data);//头部插入函数
void SeqListPopFront(PSeq ps);//头部删除函数
void SeqListInsert(PSeq ps, int pos, DataType data);//指定位置插入函数
void SeqListErase(PSeq ps, int pos); //
int SeqListFind(PSeq ps, DataType data);//查找函数
int SeqListEmpty(PSeq ps);
int SeqListSize(PSeq ps);
int SeqListCapacity(PSeq ps);//容量检测
void SeqListClear(PSeq ps);
void SeqListRemove(PSeq ps, DataType data);
void SeqListDestroy(PSeq ps); //顺序表的销毁
void CheckCapacity(PSeq ps); //检测
void TestSeqList();

.c文件如下

#include<stdio.h>
#include<malloc.h>
#include"SeqList.h"
#include<assert.h>
#include<stdlib.h>
void SeqListInit(PSeq ps, int capacity) {   //初始化ps->_array = (DataType*)malloc(sizeof(DataType)*capacity);if (NULL == ps->_array) {assert(0);    //只在调试版本下起作用  在release的版本return;//返回了但是可能会继续运行}ps->_capacity = capacity;    //上面申请空间 这两句话是用来ps->_size = 0;               //设置容量和有效元素的大小
}
void SeqListDestroy(PSeq ps) {    //销毁顺序表if (ps->_array) {free(ps->_array);ps->_array = NULL;ps->_capacity = 0;ps->_size = 0;}
}
//判断顺序表是不是没有元素
int SeqListEmpty(PSeq ps) {assert(ps);return 0 == ps->_size;
}
//尾部插入
void SeqListPushBack(PSeq ps, DataType data) {assert(ps);CheckCapacity(ps);ps->_array[ps->_size] = data;ps->_size++;
}
//尾部删除函数
void SeqListPopBack(PSeq ps) {assert(ps);if (SeqListEmpty(ps))return;ps->_size--;
}
//头部插入函数
void SeqListPushFront(PSeq ps, DataType data) {assert(ps);void CheckCapacity(PSeq ps);for (int i = ps->_size - 1; i >=0; i--) { //0号位置元素也需要搬移ps->_array[i] = ps->_array[i - 1];    //元素为搬移}ps->_array[0] = data;ps->_size++;
}
//头部删除函数
void SeqListPopFront(PSeq ps) {for (int i =1; i<ps->_size; ++i)  //如果没有元素 size为0无法进入循环{ps->_array[i - 1] = ps->_array[i];}ps->_size--;
}
//打印函数
void SeqListPrint(PSeq ps) {for (int i = 0; i < ps->_size; ++i){printf("%d ", ps->_array[i]);}printf("\n");
}
//指定位置插入函数
void SeqListInsert(PSeq ps, int pos, DataType data) {assert(ps);if (pos<0 || pos>ps->_size) {return;}CheckCapacity( ps);for (int i = ps->_size - 1; i >= pos; --i) {ps->_array[i + 1] = ps->_array[i];}ps->_array[pos] = data;ps->_size++;
}
//指定位置删除
void SeqListErse(PSeq ps, int pos) {assert(ps);if (pos < 0 || pos >= ps->_size) {return;}for (int i = pos + 1; i < ps->_size; ++i) {ps->_array[i - 1] = ps->_array[i];}ps->_size--;
}
//查找函数
int SeqListFind(PSeq ps, DataType data) {assert(ps);for (int i = 0; i < ps->_size; i++) {if (ps->_array[i] == data)return i;}return -1;
}
void SeqListClear(PSeq ps) {assert(ps);ps->_size = 0;
}
//移除第一个值为data值的元素
void SeqListRemove(PSeq ps, DataType data) {assert(ps);SeqListErse(ps, SeqListFind(ps, data));
}
//扩容
void CheckCapacity(PSeq ps) {assert(ps);if (ps->_size >= ps->_capacity) {int newCapacity = ps->_capacity * 2;int *ptemp = (DataType*)malloc(newCapacity * sizeof(DataType));if (NULL == ptemp) {assert(0);}for (int i = 0; i < ps->_size; i++)ptemp[i] = ps->_array[i];free(ps->_array);ps->_array = ptemp;ps->_capacity = newCapacity;}
}
//打印目前容量和总大小
void SeqListCapacity1(PSeq ps) {assert(ps);printf("总容量为%d有效元素为%d\n", ps->_capacity, ps->_size);
}
//检验函数
void BuddleSort(PSeq ps) {for (int i = 0; i < ps->_size - 1; i++){int a = 0;for (int j = 0; j < ps->_size-1; j++){if (ps->_array[j] > ps->_array[j + 1]){a = 1;int b = ps->_array[j];ps->_array[j] = ps->_array[j + 1];ps->_array[j + 1] = b;}}if (a == 0) {return;
}
}
}
int main() {SeqList s;SeqListInit(&s, 10);SeqListPushBack(&s, 1);SeqListPrint(&s);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPrint(&s);SeqListPopBack(&s);SeqListPrint(&s);SeqListPushFront(&s, 9);SeqListPrint(&s);SeqListPopFront(&s);SeqListPrint(&s);SeqListInsert( &s,0,8 );SeqListPrint(&s);SeqListErse( &s,1);SeqListPrint(&s);int a = SeqListFind(&s,5);printf("找到了在%d位置\n", a); SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPushBack(&s, 4);SeqListPushBack(&s, 5);SeqListPrint(&s);SeqListCapacity1(&s);BuddleSort(&s);SeqListPrint(&s);SeqListDestroy(&s);system("pause");return 0;
}

函数运行如此
可以对照主函数完成了数字的头插入任意位置插入以及尾插入和相对于的删除,最后用冒泡排序将所有数字拍好排号由小打到排列。

关于顺序表概念及其用法总结相关推荐

  1. 顺序表专题(1)——顺序表

    顺序表 概念 基本形式 顺序表基本布局 元素外置的顺序表基本布局 图解 顺序表的实现 一体式实现 分离式结构 图解 元素存储区操作 元素存储区替换 元素存储区扩充 概念 需求:将一组(通常是同一类型) ...

  2. 顺序表与链表结构及解析

    目录 前言 一.顺序表和链表是什么? 二.顺序表和链表的结构分析 0.线性表 1.顺序表 1.1顺序表概念及结构 1.2顺序表功能的基本实现 3.链表 3.1 链表的概念及结构 3.2 链表的分类 前 ...

  3. 数据结构入门——顺序表(SeqList)详解(初始化、增、删、查、改)

    SeqList顺序表 1. 线性表介绍 2. 顺序表 2.1 顺序表的结构介绍 2.2 顺序表的定义和接口声明--`SeqList.h` 2.3 顺序表接口函数的具体实现--`SeqList.c` 3 ...

  4. 数据结构与算法:顺序表和链表的常用操作 (很全,基本涵盖本章所有算法)

    文章目录 前言: 一.顺序表 二.链表 前言: 数据结构中的表操作算是里面较为简单的章节,但也比较重要,3月份学完的此章节,左思右想今天还是写篇 关于顺序表和链表的博客. ps : 复制代码可以在编译 ...

  5. c语言pushback用法,C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack...

    #include #include #include #include #include typedef int DateType; typedef struct SeqList { DateType ...

  6. 顺序表——基本概念、顺序表类实现、基本操作

    顺序表 线性表的顺序存储结构 1.数组是实现顺序存储结构的基础. 特点:地址连续确定,容量固定,随机存取T(n) = O(1) 一维数组占用一块内存空间,数组的存储单元个数成为数组容量,也成为数字长度 ...

  7. PTA第一章作业1--数据结构基本概念 顺序表基本操作

    6-2 顺序表基本操作 (10分) 本题要求实现顺序表元素的增.删.查找以及顺序表输出共4个基本操作函数.L是一个顺序表,函数Status ListInsert_Sq(SqList &L, i ...

  8. HTML+CSS---定位(相对定位--绝对定位--固定定位--设置元素的层叠顺序)---表单---设置光标样式---透明度(opacity属性定义元素的不透明度--IE的半透明滤镜)---外边线

    文章目录 定位 静态定位(static) 相对定位(relative) 绝对定位(absolute) 固定定位(fixed) 设置元素的层叠顺序 表单 设置光标样式 透明度 opacity属性定义元素 ...

  9. 数据结构之【线性表】(顺序表、链表的基本操作实现)

    概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...

最新文章

  1. bootsrap Glyphicons 字体图标
  2. 机器学习基础——实现基本的决策树
  3. vscode配置live-server转发代理
  4. 如何下载Lucene.net源码
  5. 函数返回字符串指针C语言,C语言:利用指针和函数调用编写字符串拷贝函数strcpy...
  6. BUAAOO第二单元总结之电梯问题
  7. .net页面间的参数传递简单实例
  8. 三、后台实战——用户登录之JWT
  9. 金蝶专业版怎么反过账当月_金蝶KIS专业版没有反过账功能,怎么反过账
  10. Oracle 创建新用户后无法登入,显示user lacks CREATE SESSION privilege; logon denied
  11. 如何注册谷歌账号、邮箱(22.8.23亲测可用)
  12. 计算机指数函数表示法,指数函数e^x的快速计算方法
  13. 可行性研究报告计算机,计算机软件设计师:软件可行性研究报告[1]
  14. week_07_数据库,JDBC,Utils,Html中文本,超链接,表格,表单,框架,图像标签
  15. 设置deepin国内源
  16. hostapd配置解析
  17. 以nba球员数据学习聚类算法
  18. 聊聊程序员如何用技术变现?
  19. 幼儿园班级信息管理系统
  20. 小米手机因为默认权限设置电话拨号,短信等广播无法使用的解决办法

热门文章

  1. 试卷代号:4988 2021年春季学期期末统一考试电子政务概论 试题(开卷)
  2. ChinaSoft 论坛巡礼 | 软件智能合成理论与方法
  3. 棒约翰任命Marvin Boakye为首位首席人力官
  4. 【windows】win10/win11 更改window文件夹下的中文用户名 C:\Users\用户名\
  5. 一文掌握阿里云容器镜像服务ACR
  6. 昆石VOS3000_2.1.2.4完整安装包及安装脚本
  7. pion ice项目源码分析
  8. 红米10x android11,红米10X 5G版刷机包MIUI11
  9. STM32 RCC浅析
  10. 桌面窗口管理器dwm.exe内存过高,intel核显内存泄漏问题(附核显升级链接)