静态顺序表概念及结构
顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删改查。
顺序表一般可以分为:
- 静态顺序表:使用定长数组存储元素。
#define N 7
typedef int SLDatatype;
struct SeqList
{
SLDatatype a[N];//定长数组
size_t size;//有效数据的个数
}SeqList;
静态链表的缺点:空间是固定的,给小了不够用,给多了浪费
- 动态顺序表
typedef int SLDatatype;
typedef struct SeqList
{
SLDatatype* a;
int size;//存储的有效数据的个数
int capacity;//容量
}SL;
//SeqList.h
//定义结构体和函数
#include<stdio.h>
#include<stdlib.h>
typedef int SLDatatype;
typedef struct SeqList
{
SLDatatype* a;
int size;//存储的有效数据的个数
int capacity;//容量
}SL;
void SLInit(SL* psl);
void SLDestory(SL* psl);
void SLprint(SL* psl);
//STL命名风格
void SLPushBack(SL* psl,SLDatatype x);//尾插
void SLPushFront(SL* psl,SLDatatype x);//头插
void SLPopBack(SL* psl);
void SLPopFront(SL* psl);
//SeqList.c
//函数主体部分
#include"SeqList.h"
//void SLInit(SL* psl)
//{
// psl->a=NULL;
// psl->size=0;
// psl->capacity=0;
//}
void SLInit(SL* psl)
{
psl->a=(SLDatatype*)malloc(sizeof(SLDatatype)*4);
if(psl->a==NULL)
{
perror("malloc fail");
return;
}
}
void SLDestory(SL* psl);
{
free(psl->a);
psl->a=NULL;
psl->size=0;
psl->capacity=0;
}
void SLPrint(SL*psl)
{
for(int i=0;i<psl->size;i++)
{
printf("%d
}
void SLCheckCapacity(SL* psl)
{
if(psl->size==psl->capacity)
{//扩容扩二倍合适
SLDatatype* tmp=realloc(psl->a,sizeof(SLDatatype)*psl->capacity*2);
if(tmp==NULL)
{
perror("realloc fail");
return;
}
psl->a=tmp;
psl->capacity*=2;
}
}
void SLPushBack(SL* psl,SLDatatype x)
{
//psl->a[psl->size]=x;
//psl->size++;
psl->a[psl->size++]=x;
}
void SLPushFront(SL* psl,SLDatatype x)
{
}
void SLPopBack(SL* psl)
{
}
void SLPopFront(SL* psl)
{
}
//Test.c
//主函数
#include"SeqList.h"
int main()
{
Sl s;
SLInit(&s);
SLPushBack(&s,1);
SLPushBack(&s,2);
SLPushBack(&s,3);
SLPushBack(&s,4);
SLPushBack(&s,5);
SLPushBack(&s,6);
SLPushBack(&s,7);
SLPushBack(&s,8);
SLPrint(&s);
SLDestory(&s);
SLCreate(&s);
return 0;
}