IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构顺序表介绍与基本操作(C语言)实现 -> 正文阅读

[数据结构与算法]数据结构顺序表介绍与基本操作(C语言)实现

顺序表的概念

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

顺序表可分为:

  • 静态顺序表:使用定长数组存储元素。
    • 动态顺序表:使用动态开辟的数组存储元素。

?以下为动态顺序表的实现

????????首先要想实现顺序表上数据的增删查改?,我们需要接口函数来实现。

?声明接口函数

typedef int SLDateType; //重命名int
typedef struct SeqList
{
	SLDateType *a;
	size_t size;  //顺序表所含数据的个数
	size_t Capacity;  //顺序表所能存储数据的的大小

}SL;
//接口函数

//初始化顺序表
void SeqListInit(SL* ps);
//销毁顺序表
void SeqListDestory(SL*ps);
//打印顺序表
void SeqlistPrint(SL*ps);
//尾加
void SeqListPushBack(SL*ps, SLDateType x);
//尾删
void SeqListPopBack(SL*ps);
//前加
void SeqlisrPushFront(SL*ps, SLDateType x);
//前删
void SeqListPopFront(SL*ps);
// 顺序表查找
int SeqListFind(SL* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SL* ps, size_t pos, SLDateType x);
// 顺序表删除pos位置的值
void SeqListErase(SL* ps, size_t pos);

?接口函数的定义

?初始化顺序表:

void SeqListInit(SL*ps)
{
    ps->a = NULL;
    ps->size = ps->Capacity = 0;
}

?销毁顺序表:

void SeqListDestory(SL*ps)
{
    free(ps->a);
    ps->a=NULL;
    ps->size = ps->Capacity = 0;
}

打印顺序表:

void SeqListPrint(SL*p)
{
    for(int i = 0; i< ps->size; i++)
    {
        printf("%d",ps->a[i]);
    }
    printf("\n");
}

(在进行尾加之前需要检查是否有空间)

检查空间(没有就扩容):

void SeqListCheckCapacity(SL*ps)
{
    if(ps->size == ps->Capacity)
    {
        int newcapacity = ps->Capacity == 0 ? 4 : 2 * (ps->Capacity);
        SLDateType *tmp = (SLDateType*)realloc(ps->a, newcapacity*sizeof(SLDateType));
        if(tmp == NULL)
        {
            printf("realloc fail\n");
            exit(-1);
        }
        ps->a = tmp;
        ps->Capacity = newcapacity;
    }
}

尾加:

void SeqListPushBack(SL*ps,SLDateType x)
{
    SeqListCheckCapacity(ps);//检查是否有空间没有就扩容
    ps->a[ps->size-1] = x;
    ps->size++;
}

尾删:

void SeqListPopBack(SL*ps)
{
    if(ps->size > 0)
    {
        ps->size--;
    }
}
或者暴力一点
void SeqListPopBack(SL*ps)
{
    assert(ps->size > 0);
    ps->size--;   
}

前加:

void SeqListPushFront(SL* ps, SLDatetype x)
{
    SeqListCheckCapacity(ps);
    int end = ps->size - 1;
    while(end>=0)
    {
        ps->a[end+1] = ps->a[end];
        end--;
    }
    ps->a[0] = x;
    ps->size++;
}

前删;

void SeqListPopFront(SL*ps)
{
    int begin = 1;
    while(begin<=ps->size-1)
    {
        ps->a[begin-1] = ps->a[begin];
        begin++;
    }
    ps->size--;
}

顺序表查找:

int SeqListFind(SL* ps, SLDateType x)
{
    for(int i = 0; i< ps->size; i++)
    {
        if(x == ps->a[i])
        {
            return i;
        }
    }
    return -1;
    
}

顺序表在pos位置插入x:

void SeqListInsert(SL* p, size_t pos, SLDateType x)
{    
    assert(pos >= 0 && pos <= ps->size);
    SeqListCheckCapacity(ps);
    int end = ps->size-1;
    while(pos <= end)
    {
        ps->a[end+1] = ps->a[end];
        end--;
    }
    ps->a[pos] = x;
    ps->size++;
}

顺序表删除pos位置的值:

void SeqListErase(SL*ps, size_t pos)
{
    int end = pos+1;
    assert(pos >= 0 && pos < ps->size);//防止越界访问
    while(end < ps->size)
    {
        ps->a[end-1] = ps->a[end];
        end++;
    }
    ps->size--;
}

如果这个文章对你有用,请给我一个赞,感谢老铁。

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:14:11  更:2021-10-17 12:14:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:23:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码