【数据结构】之 动态顺序表(C语言)(含完整代码)

顺序表概念:

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

代码解析:

1.准备工作

1. 首先对一些头文件的引用和创建一个结构体,结构体包含一个数组,size表示该数组目前有多少个元素,capacity表示目前数组能存多少个元素。例如:

 

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>

typedef int DataType;
typedef struct SeqList
{
	DataType* a;
	int size;
	int capacity;
}SL;

2.创建一个顺序表

SL sl;

二、顺序表的基本操作 

1.顺序表的初始化函数

         注意这里的参数得是指针,形参是实参的一份临时拷贝,所以得把地址传给函数才能改变值。

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

2.尾插函数(在尾部插入数据)

        写尾插函数之前我们得先判断一下数组空间是否够。例如下面的例子。

所以我们要先检查空间是否满了,满了就扩容

将这个判断空间函数命名为  void CheckSpace(SL* sl) (这是动态顺序表区别于静态顺序表最主要的部分) 

void CheckSpace(SL* sl)
{
	if (sl->size == sl->capacity)
	{
		//因为capacity一开始等于0,所以先给capacity一个值
		int newcapacity = sl->capacity == 0 ? 4 : sl->capacity * 2;
		DataType* tmp = (DataType*)realloc(sl->a, sizeof(DataType)*newcapacity);
		if (tmp == NULL)
		{
			printf("开辟失败\n");
			exit(-1);
		}
		else
		{
			sl->capacity = newcapacity;
			sl->a = tmp;
		}
	}
}

尾插函数:

void SeqListPushBack(SL* sl, DataType x)
{
CheckSpace(sl);
	sl->a[sl->size] = x;
	sl->size++;
}

3.头插函数(在数

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值