动态顺序表的基本操作

SeqListD.h

#define _CRT_SECURE_NO_WARNING 1

#pragma once
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <stdlib.h>

typedef int DataType;

typedef struct SeqListD
{
	DataType* array;
	int size;      //有效元素的个数
	int capacity;  //顺序表的容量
}SqlD,*PSqlD;


//动态顺序表的初始化
void SeqListDInit(PSqlD psd,int capacity);
void SeqListDPushBack(PSqlD psd,DataType data); //顺序表的尾插
void SeqListDPopBack(PSqlD psd);   //顺序表的尾删
//任意位置插入元素
void SeqListDInsert(PSqlD psd,int pos,DataType data);
//删除任意位置的元素
void SeqListDErase(PSqlD psd,int pos);

int SeqListDSize(PSqlD psd);//获取元素的个数

//获取顺序表的容量
int SeqListDCapacity(PSqlD psd);
int SeqListDEmpty(PSqlD psd);//判空

//将顺序表的元素清空 ,注意:不改变顺序表的空间大小
void SeqListDClear(PSqlD psd);
void SeqListDDestroy(PSqlD psd);

//对顺序表进行增容
int CheckCapacity(PSqlD psd);

//打印顺序表
void PrintSeqListD(PSqlD psd);

SeqListD.c

#define _CRT_SECURE_NO_WARNING 1

#include "SeqListD.h"



//动态顺序表的初始化
void SeqListDInit(PSqlD psd,int capacity)
{
	if(NULL == psd)  //判断顺序表是否存在
		return;
	//顺序表存在
	psd->array = (DataType*)malloc(capacity*sizeof(DataType));

    if(NULL == psd->array)
	{
		printf("申请空间失败!!!\n");
		return;
	}
	//申请成功
	psd->capacity = capacity;
	psd->size = 0;
}



//顺序表的尾插
void SeqListDPushBack(PSqlD psd,DataType data)
{
	if(NULL == psd)
		return;
	//如果顺序表存在
	if(psd->size == psd->capacity)//元素个数等于容量时,空间已满
		CheckCapacity(psd);//进行扩容
	psd->array[psd->size] = data;
	psd->size++;
}

//顺序表的尾删
void SeqListDPopBack(PSqlD psd)
{
	if(NULL == psd)
		return;
	if(0 == psd->size)
	{
		printf("顺序表已空无法删除!!!\n");
		return;
	}
	psd->size--;
}

//任意位置插入元素
void SeqListDInsert(PSqlD psd,int pos,DataType data)
{
	int i = 0;
	if(NULL == psd)
		return;
	if(psd->capacity == psd->size)
		CheckCapacity(psd);
	i = psd->size-1;
	for( ;i>pos-1;i--)
	{
		psd->array[i+1] = psd->array[i];
	}
	psd->array[pos] = data;
	psd->size++;
}

//删除任意位置的元素
void SeqListDErase(PSqlD psd,int pos)
{
	int i = 0;
	if(NULL == psd)
		return;
	if(0 == psd->size)
	{
		printf("顺序表已空无法删除!!!\n");
		return;
	}
	for(i=pos;i<psd->size;i++)
	{
		psd->array[i] = psd->array[i+1];
	}
	psd->size--;
}

//获取元素的个数
int SeqListDSize(PSqlD psd)
{
	if(NULL == psd)
		return 0;
	return psd->size;
}

//获取顺序表的容量
int SeqListDCapacity(PSqlD psd)
{
	if(NULL == psd)
		return 0;
	return psd->capacity;
}

//判空
int SeqListDEmpty(PSqlD psd)
{
	if(NULL == psd)
	{
		assert(0); // 断言顺序表是否存在
		return -1;
	}
	if(psd->size == 0)
		return 0;
	else
		return 1;
}

//将顺序表的元素清空 ,注意:不改变顺序表的空间大小
void SeqListDClear(PSqlD psd)
{
	if(NULL == psd)
		return;
	psd->size = 0;
	printf("顺序表已清空!!!\n");
}

//销毁顺序表
void SeqListDDestroy(PSqlD psd)
{
	if(NULL == psd)
		return;
	psd->size = 0;
	psd->capacity = 0;
	free(psd->array);
	psd->array = NULL;
	printf("顺序表已销毁!!!\n");
}

//顺序表扩容
int CheckCapacity(PSqlD psd)
{
	if(NULL == psd)
		return 0;
	if(psd->size == psd->capacity)
	{
		int newcapacity = psd->capacity*2;
		psd->array = (DataType*)realloc(psd->array,newcapacity*sizeof(DataType));
		if(NULL ==psd->array)
		{
			printf("申请空间失败!!!\n");
			return 0;
		}
		psd->capacity = newcapacity;
	}
	return 1;
}


//打印顺序表
void PrintSeqListD(PSqlD psd)
{
	int i = 0;
	if(NULL == psd)
		return;
	for( ; i<psd->size;i++)
	{
		printf("%d ",psd->array[i]);
	}
	printf("\n");
}


	

test.c

#define _CRT_SECURE_NO_WARNING 1

#include "SeqListD.h"


int main()
{
	SqlD s;
	SeqListDInit(&s,8);
	SeqListDPushBack(&s,1);
	SeqListDPushBack(&s,2);
	SeqListDPushBack(&s,3);
	SeqListDPushBack(&s,4);
	SeqListDPushBack(&s,5);
	SeqListDPushBack(&s,6);
	SeqListDPushBack(&s,7);
	SeqListDPushBack(&s,8);
	SeqListDPushBack(&s,9);
	PrintSeqListD(&s);

	//SeqListDInsert(&s,3,120);
	//PrintSeqListD(&s);

	/*SeqListDPopBack(&s);
	PrintSeqListD(&s);*/

	SeqListDInsert(&s,4,7);
	PrintSeqListD(&s);

	//SeqListDPopBack(&s);
	//PrintSeqListD(&s);

	SeqListDErase(&s,6);
	PrintSeqListD(&s);
	printf("此时顺序表的元素个数是:%d\n", SeqListDSize(&s));
	printf("此时顺序表的容量是:%d\n", SeqListDCapacity(&s));

	//SeqListDClear(&s);
	//PrintSeqListD(&s);

	SeqListDDestroy(&s);
	PrintSeqListD(&s);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值