目录
1.线性表
线性表(linear list)是有n个相同特性的元素组成的有限序列,在逻辑上是线性结构,也就是连续的一条直线;但是在物理结构上,不一定是连续的。
常见的线性表有:
顺序表、链表、栈、队列、字符串....
2.顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的数据结构,一般采用数组存储,在数组上完成增删查改。
顺序表一般分为:
1.静态的顺序表:使用定长数组存储元素。
define N 6
typedef int SeqListDataType;
typedef struct SeqList
{
SeqListDataType arr[N];//创建数组
int size;//有效元素个数
}SL;
2.动态顺序表:使用动态开辟的数组存储。
typedef int SeqListDataType;
typedef struct SeqList
{
SeqListDataType* ps;//创建指向动态开辟数组的指针
int size;//有效元素个数
int capicity;//数组的容量大小
}SL;
2.2接口实现
由于静态数据表只适用与确定需要存储多少数据的情况,实际中一般使用动态数据表,根据数据的多寡来扩容空间,所以下面实现动态顺序表。
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SeqListDataType;
typedef struct SeqList
{
SeqListDataType* ps;
int size;
int capicity;
}SL;
void SeqLIstInst(SL* ps); //初始化
void CheckCapacity(SL* ps); //判断容量是否足够
void SeqLIstPushBack(SL* ps, int size);//尾插
void SeqListPrint(SL* ps); //打印顺序表
void SeqListPopBack(SL* ps); //顺序表尾删
void SeqListPushFront(SL* ps, int size);//顺序表头插
void SeqListPopFront(SL* ps); //顺序表头删
void SeqListFind(SL* ps, int x); //顺序表查找
void SeqListInsert(SL* ps, int pos,int x); //指定位置插入
void SeqListErase(SL* ps, int pos); //指定位置pos删除
void SeqListDestory(SL* ps); //销毁数据表
//-------------------------------------------------------------------------------------
void SeqLIstInst(SL* ps) //初始化
{
ps->ps = (SeqListDataType*)malloc(sizeof(SeqListDataType) * 4);
if (ps->ps == NULL)
{
printf("申请空间失败\n");
exit(-1);
}
ps->size = 0;
ps->capicity = 4;
}
void CheckCapacity(SL* ps) //检查顺序表满了没
{
assert(ps);
if (ps->capicity == ps->size)
{
ps->capicity *= 2;
ps->ps=(SeqListDataType*)realloc(ps->ps , ps->capicity*sizeof(SeqListDataType));
if (ps->ps == NULL)
{
printf("增容失败\n");
exit(-1);
}
}
}
void SeqLIstPushBack(SL* ps, int size) //尾插
{
assert(ps);
CheckCapacity(ps); //检查顺序表满了没
ps->ps[ps->size] = size;
ps->size++;
}
void SeqListPrint(SL* ps) //打印顺序表
{
assert(ps);
int i = 0;
for (; i < ps->size; i++)
{
printf("%d ", ps->ps[i]);
}
printf("\n");
}
void SeqListPopBack(SL* ps) //顺序表尾删
{
as