【数据结构】顺序表

静态顺序表概念及结构

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

顺序表一般可以分为:

  1. 静态顺序表:使用定长数组存储元素。
#define N 7
typedef int SLDatatype;

struct SeqList
{
	SLDatatype a[N];//定长数组
	size_t size;//有效数据的个数
}SeqList;

静态链表的缺点:空间是固定的,给小了不够用,给多了浪费
  1. 动态顺序表
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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值