线性表包括顺序表,链表,栈,队列
本章我们只看顺序表。
顺序表分为动态表和静态表。
动态表就是空间大小可以被更改的表,静态表则为空间大小不可以变化的表。静态顺序表空间开辟在栈上,儿动态开辟在堆上。
那么顺序表怎么定义?
#pragma once
typedef struct seqList
{
//大小确定,一般不要太大,因为静态空间是开在栈空间上的,栈空间相比较而言比较小
int _array[100];
int _size;
}seqList;
静态空间空间一般不会很大,因为静态空间是开辟在栈空间上的,栈空间相对而言比较小,而且固定空间的话可能会造成一个非常大的空间浪费,所以我们一般使用动态顺序表,用多少开辟多少就行了,不会有很大的资源浪费。
那么动态的顺序表是怎么开辟呢?
一般的话我们会给一个指针,还有一个容量的概念。
#pragma once
typedef int DataType;//类型别名,增加代码的灵活性
typedef struct seqList
{
DataType *_array;
unsigned int _size;//或者用size_t _size;也是无符号整型,不过要包含头文件#include<stdio.h>
unsigned int _capacity;
}seqlist;
-size表示目前表中有多少元素。
capacity表示当前有多大的容量,能用的空间一共有多大。
一般要实现的接口有,插入,删除,
void seqListInit(seqList* sl);//初始化
void seqListPushBack(seqList* sl,DataType value);//尾插
void seqListPopBack(seqList* sl);//尾删
void seqListPushFront(seqList* sl,DataType value);//头插
void seqListPopFront(seqList* sl);//头删
void seqListPushInsert(seqList* sl,size_t pos,DataType value);//在某个地方插入一个元素
void seqListErase(seqList* sl,size_t pos);//删除pos位置的元素
int seqListFind(seqList* sl,DataType value);//查找
void seqListPrint(seqList* sl);//打印
接口的实现如下:
#include "seqlist.h"
#include <stdlib.h>
void seqListInit(seqList* sl)//初始化
{
//初始化数组
sl->_array = (int *)malloc(sizeof(DataType)* 4);
sl->_capacity