广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现动态顺序表的示例代码
  • 624
分享到

C语言实现动态顺序表的示例代码

C语言动态顺序表C语言顺序表 2022-11-13 18:11:12 624人浏览 八月长安
摘要

目录顺序表概念及结构基本操作功能实现程序运行顺序表概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 分

顺序表概念及结构

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

分类:

一般分为静态顺序表和动态顺序表;

静态顺序表:数组大小是固定的用完了无法增容;同时我们无法控制给数组开多少空间合适,开少了,空间不够;开多了,有回会存在空间浪费;

动态顺序表:空间是可以变动的,空间满了我们就增容;解决了静态顺序表的空间不足问题,同时也在一定程度上减少了空间浪费;

因此本篇博客主要实现动态顺序表;(静态顺序表实现思路差不多,读者可以自行写一下)

动态顺序表数据结构

基本操作

#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include<assert.h>
typedef int SLDateType;
typedef struct SeqList
{
	SLDateType* a;//用于维护动态开辟的数组
	size_t size;//用于维护动态数组有多少个有效值
	size_t capacity; // size_t==unsigned int//用于维护当前动态数组有多少空间
}SeqList;

// 对数据的管理:增删查改 
//初始化顺序表
void SeqListInit(SeqList* ps);
//销毁顺序表
void SeqListDestroy(SeqList* ps);
//显示顺序表
void SeqListPrint(SeqList* ps);
//尾插
void SeqListPushBack(SeqList* ps, SLDateType x);
//头插
void SeqListPushFront(SeqList* ps, SLDateType x);
//头删
void SeqListPopFront(SeqList* ps);
//尾删
void SeqListPopBack(SeqList* ps);
// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, size_t pos, SLDateType x);
// 顺序表删除pos位置的值
void SeqListErase(SeqList* ps, size_t pos);

功能实现

#include"SeqList.h"
static void Check_Capacity(SeqList* ps)
{
    if (ps->capacity == ps->size)//容量满了或者还没开辟空间
    {
        size_t NewCapacity = (ps->capacity == 0) ? 4 : ps->capacity * 2;
        int* tmp = (int*)realloc(ps->a, NewCapacity * sizeof(int));
        if (tmp == NULL)
            exit(-1);
        ps->a = tmp;
        ps->capacity = NewCapacity;
    }
}
void SeqListInit(SeqList* ps)
{
    assert(ps);
    ps->a = NULL;
    ps->capacity = 0;
    ps->size = 0;
}
void SeqListDestroy(SeqList* ps)
{
    assert(ps);
        free(ps->a);
        ps->capacity = 0;
        ps->size = 0;
}
void SeqListPrint(SeqList* ps)
{
    assert(ps);
    if (ps->size)
    {
        int len = ps->size;
        for (int i = 0; i <len; i++)
            printf("%d ", ps->a[i]);
    }
    else
        printf("NULL\n");
}
void SeqListPushBack(SeqList* ps, SLDateType x)
{
    assert(ps);
    Check_Capacity(ps);
    //在插入数据之前要先检查一下是否还有剩余容量
    ps->a[ps->size] = x;
    ps->size++;
}
void SeqListPushFront(SeqList* ps, SLDateType x)
{
    assert(ps);
    Check_Capacity(ps);
    int end = ps->size - 1;
    for (end; end >= 0; end--)
        ps->a[end + 1] = ps->a[end];
    ps->a[end + 1] = x;
    ps->size++;

}
void SeqListPopFront(SeqList* ps)
{
    assert(ps);
    assert(ps->size>0);//都没元素了就不删了
    int begin = 1;
    int len = ps->size;
    for (begin; begin < len; begin++)
        ps->a[begin - 1] = ps->a[begin];
    ps->size--;
}
void SeqListPopBack(SeqList* ps)
{
    assert(ps);
    assert(ps->size>0);
    ps->size--;
}
int SeqListFind(SeqList* ps, SLDateType x)
{
    assert(ps);
    assert(ps->size>0);
    int len = ps->size;
    for (int i = 0; i < len; i++)
        if (ps->a[i] == x)
            return i;
    return -1;
}
void SeqListInsert(SeqList* ps, size_t pos, SLDateType x)
{
    assert(ps);
    //如果pos给我乱传,超出合法范围?
    assert(pos<=ps->size);
    Check_Capacity(ps);
    int end = ps->size - 1;
    int target = pos;
    for (; end >= target; end--)//这里会发生向上转换,最好把pos类型转换一下
        ps->a[end + 1] = ps->a[end];
    ps->a[end+1] = x;
    ps->size++;

}

void SeqListErase(SeqList* ps, size_t pos)
{
    assert(ps);
    assert(ps->size>0);
    //pos乱传?
    assert(pos<=ps->size);
    int begin = pos + 1;
    int len = ps->size;
    for (; begin < len; begin++)
    {
        ps->a[begin - 1] = ps->a[begin];
    }
    ps->size--;
}

程序运行

到此这篇关于C语言实现动态顺序表的示例代码的文章就介绍到这了,更多相关C语言动态顺序表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现动态顺序表的示例代码

本文链接: https://www.lsjlt.com/news/170292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现动态顺序表的示例代码
    目录顺序表概念及结构基本操作功能实现程序运行顺序表概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 分...
    99+
    2022-11-13
    C语言 动态顺序表 C语言 顺序表
  • C语言动态顺序表实例代码
    目录顺序表概念:一.准备工作二、顺序表的基本操作 1.顺序表的初始化函数2.尾插函数(在尾部插入数据)3.头插函数(在数组头部插入数据) 4.尾删函数5.头删函数6.在第pos的位置...
    99+
    2022-11-12
  • C语言动态顺序表实例代码怎么编写
    这篇文章给大家介绍C语言动态顺序表实例代码怎么编写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。顺序表概念:        顺序表是用一段物理地址连续的存储单元依次存储数据元素的...
    99+
    2023-06-22
  • C语言实现动态链表的示例代码
    目录结构体定义已经函数声明函数实现创建一个链表判断链表是否为空获得链表中节点的个数在某个特定的位置插入一个元素获得指定下标的节点的元素删除一个节点链表逆序链表的清空链表的销毁链表的遍...
    99+
    2022-11-13
  • C语言实现动态顺序表详解
    目录什么是顺序表?1. 定义顺序表结构体:2. 初始化顺序表:3. 销毁顺序表:4. 打印顺序表:5. 判断容量+扩容:6. 头插数据:7. 尾插数据:8. 指定下标位置插入...
    99+
    2022-11-12
  • C/C++实现线性顺序表的示例代码
    目录线性顺序表简介C语言实现代码C++语言实现代码线性顺序表简介 使用顺序存储结构的线性存储结构的表为线性顺序表,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,线...
    99+
    2022-11-13
  • C语言实现线性动态(单向)链表的示例代码
    目录什么是链表为什么不用结构体数组链表的操作创建表删除元素插入元素代码及运行结果什么是链表 链表是数据结构里面的一种,线性链表是链表的一种,线性链表的延伸有双向链表和环形链表。在编程...
    99+
    2022-11-13
  • C语言线性表顺序表示及实现
    目录准备工作实现线性表线性表的动态分配顺序存储结构构造一个空的线性表对线性表进行赋值对线性表进行销毁对线性表进行重置判断线性表是否为空获取线性表的长度获取线性表某一位置对应的元素在线...
    99+
    2022-11-13
  • C++中顺序表操作的示例代码
    编写程序,实现顺序表的下列功能: 从键盘输入数据建立一个顺序表输出该顺序表往顺序表中插入数据从顺序表中删除数据给定数据,进行查找,给出查找成功和失败信息 C++代码: #includ...
    99+
    2022-11-13
    C++顺序表操作 C++ 顺序表
  • 新手向超详细的C语言实现动态顺序表
    目录一、各个函数接口的实现 1.1 不太好‘'李姐‘'的“容量检测函数” 1.2 在任意位置插入的函数"坑!" 1.3 在任意位置删除数据的函数 1.4 其余简单的接口函数 二、顺序...
    99+
    2022-11-12
  • C语言线性表中顺序表的示例分析
    小编给大家分享一下C语言线性表中顺序表的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、本章重点线性表和顺序表的概念动态和静态顺序表接口实现在线0j训练...
    99+
    2023-06-29
  • C语言实现顺序表的基本操作的示例详解
    目录一、认识顺序表1.线性表2.顺序表的概念及结构二、顺序表的基本操作(接口实现)1.初始化顺序表2.打印顺序表3.尾插4.尾删5.扩容6.头插7.头删8.任意位置插入9.任意位置删...
    99+
    2022-11-13
    C语言顺序表基本操作 C语言顺序表操作 C语言顺序表
  • C语言实现数独程序的示例代码
    目录程序截图简单说明代码实现程序截图 简单说明 随机生成数独的算法见力扣上对应题目的题解,我用的是递归回溯法 力扣原题 先随机放入 11 个数就能生成一个数独然后求数独的解最后...
    99+
    2023-03-03
    C语言实现数独游戏 C语言数独程序 C语言数独
  • C语言的顺序表怎么实现
    本文小编为大家详细介绍“C语言的顺序表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的顺序表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.线性表线性表(linear list)是n个具...
    99+
    2023-06-30
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2022-11-13
  • C语言实现可保存的动态通讯录的示例代码
    目录一、Contact.h二、Contact.c1、判断是否增容2、初始化通讯录3、打印4、增加联系人信息5、通过名字查找6、删除联系人信息7、查找信息8、修改信息9、排序10、清空...
    99+
    2022-11-13
  • C语言实现动态爱心代码
    代码如下: #include <stdio.h> #include <math.h> #include <windows.h> #include ...
    99+
    2022-11-13
    C语言动态爱心 C语言 爱心
  • C语言实现无头单向链表的示例代码
    目录一、易错的接口实现 1.1 新节点开辟函数 1.2 尾插 1.3 尾删 二、常见简单接口 2.1 打印链表 2.2 节点计数器 2.3 判断是否为空链表 2.4 通过值查找节点 ...
    99+
    2022-11-12
  • C语言实现经典排序算法的示例代码
    目录一、冒泡排序1.原理2.实现3.算法分析二、选择排序1.原理2.实现3.算法分析三、插入排序1.原理2.实现3.算法分析四、希尔排序1.原理2.实现3.算法分析总结一、冒泡排序 ...
    99+
    2022-11-13
    C语言排序算法 C语言排序
  • C语言实现可排序通讯录的示例代码
    目录1.目的2.分部流程1.初始化通讯录2.添加联系人3.判断联系人是否存在4.判断通讯录是否已满5.判断通讯录是否为空6.通讯录扩容7.核心函数8.查找联系人9.修改联系人10.清...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作