数据结构动态顺序表

SepListD.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
typedef struct SeqListD
{
DataType* _pData;//数据块指针
int _size;//有效数据个数
int _capacity;//动态容量
}SeqListD,*PSeqListD;
size_t它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。
通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。
因为size_t类型的数据其实是保存了一个整数
test.h
#include"SeqListD.h"
//顺序表的初始化
void SeqListDInit(PSeqListD pSeq,int capacity)
{
    pSeq->_pData = (DataType*)malloc(capacity * sizeof(DataType));
	if (pSeq->_pData == NULL)
    {
        printf("空间申请失败\n");
        return;
    }
	pSeq->_capacity = capacity;
    pSeq->_size = 0;
}

//动态增容
void CheckCapacity(PSeqListD pSeq)
{
   assert(pSeq);
   pSeq->_pData = (DataType*)realloc(pSeq->_pData,sizeof(DataType)* pSeq->_capacity*2);
   }

//尾插
void SeqListDPushBack(PSeqListD pSeq,int data)
{
   assert(pSeq);
   if(pSeq->_size >= pSeq->_capacity)
   {
        CheckCapacity(pSeq);
   }
   pSeq->_pData[pSeq->_size] = data;
   pSeq->_size++;
}

//尾删
void SepListPopBack(PSeqListD pSeq)
{
   assert(pSeq);
   pSeq->_size--;
}

//判断是否为空,为空返回true,否则返回false
int SeqListDEmpty(PSeqListD pSeq)
{
    assert(pSeq);
    return (0 == pSeq->_size);
}

//获取有效数字的个数
int SeqListDSize(PSeqListD pSeq)
{
   assert(pSeq);
   return pSeq->_size;
}

//获取容量
int SeqListDCapacity(PSeqListD pSeq)
{
   assert(pSeq);
   return pSeq->_capacity;
}

//清空顺序表中的所有元素
void SeqListDClear(PSeqListD pSeq)
{
   assert(pSeq);
   pSeq->_size = 0;
}

//销毁顺序表
void SeqListDDestroy(PSeqListD pSeq)
{
   assert(pSeq);
   pSeq->_size = 0;
   pSeq->_capacity = 0;
   free(pSeq->_pData);
}

//顺序表任意位置插入元素
void SeqListDInsert(PSeqListD pSeq,int pos ,int data)
{
   int i = 0;
   assert(pSeq);
   pSeq->_size++;
   if(pSeq->_size >= pSeq->_capacity)
   {
   CheckCapacity(pSeq);
   }
   for(i=pSeq->_size ;i>=pos;i--)
   {
	pSeq->_pData[i + 1] =pSeq->_pData[i];
   }
    pSeq->_pData[pos] =data;
}

//顺序表任意位置删除元素
void SeqListDErase(PSeqListD pSeq,int pos ,int data)
{
   int i = 0;
   assert(pSeq);
   if(pSeq->_size>0)
   {
   for(i=pos;i<pSeq->_size - 1;i++)
   {
   pSeq->_pData[i] =pSeq->_pData[i + 1];
   }
   }
}
//打印顺序表
void SeqListDPrint(PSeqListD pSeq)
{ 
   int i = 0;
   assert(pSeq);
	   for(i=0;i<pSeq->_size;i++)
	   {
		   printf("%d", pSeq->_pData[i]);
	   }
	   printf("\n");
}
int main()
{
	SeqListD PSListD;


	SeqListDInit(&PSListD,5);
	printf("顺序表的容量大小是: %d\n", SeqListDCapacity(&PSListD));
    
	SeqListDPushBack(&PSListD,0);
    SeqListDPushBack(&PSListD,1);
	SeqListDPushBack(&PSListD,2);
	SeqListDPushBack(&PSListD,3);
    SeqListDPushBack(&PSListD,4);
	printf("尾插后的顺序表: ");
	SeqListDPrint(&PSListD);

	SepListPopBack(&PSListD);
	printf("尾删后的顺序表: ");
	SeqListDPrint(&PSListD);

    printf("任意位置插入之后的顺序表: ");
	SeqListDInsert(&PSListD ,3,9);
    SeqListDPrint(&PSListD);

	SeqListDErase(&PSListD,3,9);
	printf("任意位置删除之后的顺序表:");
	SeqListDPrint(&PSListD);

	SeqListDClear(&PSListD);
	printf("销毁后的顺序表的容量为:%d ",SeqListDSize(&PSListD));
	SeqListDPrint(&PSListD);

return 0;
}



阅读更多
文章标签: 数据结构 链表
个人分类: 数据结构
上一篇时间复杂度与空间复杂度如何计算
下一篇数据结构:单链表及其功能详细实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭