顺序表的目录
1.顺序表的概念
顺序表分为1.静态顺序表 2.动态顺序表
- 顺序结构------将表中元素一个一个的存入一组连续的存储单元中
- 顺序表--------采用顺序结构的线性表
2. 熟悉顺序表的分类?
静态顺序表和动态顺序表的区别?
- 相同点:内存连续,数据顺序存储
- 不同点:所占内存空间位置不同,静态是在函数栈上,随着函数调用的结束自动被系统收回,而 动态顺序表所占内存空间在堆的内存上,不会随着函数的结束而被释放,需要用户主动去释放;
3.熟悉顺序表的优缺点
静态顺序表:操作简单,不需要用户主动去释放,所以也就不存在内存泄露;
动态顺序表:可以动态开辟内存空间,操作灵活,避免造成资源浪费;
4.动态顺序表的基本操作
4.0包含头文件和结构体
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//1. 熟悉顺序表的概念
//2. 熟悉顺序表的分类?静态顺序表和动态顺序表的区别?
//3. 实现动态顺序表的以下基本操作:
typedef int DataType;
typedef struct SeqList
{
DataType* _array; // 保存顺序表中有效元素个数
int _capacity; // 空间总大小
int _size; // 有效元素个数
} SeqList,*PSeqList;
4.1初始化,销毁,扩容
//初始化顺序表
void SeqListInit(PSeqList ps)
{
assert(ps != NULL);
ps->_capacity = 10;//容量
//开辟空间
ps->_array = (int*)malloc(sizeof(DataType)*ps->_capacity);
//size为有效个数,所以起初为0
ps->_size = 0;
}
void SeqListDestroy(PSeqList ps)
{
assert(ps != NULL);
assert(ps->_array != NULL);
free(ps->_array);
ps->_array = NULL;
ps->_capacity = 0;
ps->_size = 0;
}
void SeqListCheck(PSeqList ps)//扩容
{
if (ps->_capacity > ps->_size)
{
return;
}
int newcapacity = 2 * ps->_capacity;
DataType* new_array = (int*)malloc(sizeof(DataType)*newcapacity);
for (int i = 0; i < ps->_size; ++i)
{
new_array[i] = ps->_array[i];
}
ps->_capacity = newcapacity;
ps->_array = new_array;
}
4.2尾插,尾删,头插,头删
// 尾插
void SeqListPushBack(PSeqList ps, DataType data)
{
SeqListCheck(ps);//扩容
ps->_array[ps->_size] = data;
ps->_size++;
}
// 尾删
vo