数据结构动态顺序表

原创 2018年04月15日 20:48:04
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;
}



数据结构和算法

-
  • 1970年01月01日 08:00

数据结构2-动态生成顺序表的实例与分析

动态创建一个顺序表,并完成
  • hjxwudiha931721
  • hjxwudiha931721
  • 2014-09-19 13:44:19
  • 601

数据结构C语言版--动态顺序表的基本功能实现(二)

/* * 若各个方法结构体变量参数为: &L(即地址符加变量)则结构体变量访问结构成员变量时使用"." * 若为:*L(即取地址符加变量)则结构体变量访问结构体成员变量使用"->" * malloc(...
  • T_P_F
  • T_P_F
  • 2017-05-20 23:42:23
  • 497

数据结构_动态顺序表

顺序表 typedef int DataType; typedef struct SeqList { DataType *_a; size_t _size; size_t _c...
  • cute_shuai
  • cute_shuai
  • 2017-12-15 14:54:31
  • 79

数据结构之顺序表的建立

#include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW 0 #define LIST_INI...
  • tao_benet
  • tao_benet
  • 2012-03-15 17:01:10
  • 448

(C语言)顺序表之动态实现

点击打开链接(静态实现版) 头文件: #define _CRT_SECURE_NO_WARNINGS 1 #ifndef _SEQLIST_H__ #define _SEQLIST_H__ #inc...
  • snow_5288
  • snow_5288
  • 2016-06-01 18:36:38
  • 748

动态顺序表的基本操作

// 空间不够时动态增容 void  CheckCapacity(PSeqList pSeqList) {                  if (pSeqList ->last ==...
  • asd7486
  • asd7486
  • 2016-05-27 17:12:35
  • 206

静态顺序表和动态顺序表 对比

静态顺序表的缺陷:静态顺序表显然就是里面的内存是一定的,不能改变的,所以定义的时候可以定义一个宏,然后定义一个数组,这样就可以在数组中存储信息,而且,还可以随时改变数组的大小。typedef int ...
  • jhcconan614
  • jhcconan614
  • 2016-12-30 23:13:45
  • 240

【数据结构】动态顺序表

SeqList.h #ifndef _SEQLISTH_H_ #define _SEQLISTH_H_ #include #include #include typedef int Datatyp...
  • qq_35402412
  • qq_35402412
  • 2017-12-13 16:07:38
  • 58

c语言动态顺序表的实现

动态顺序表是在静态顺序表的基础上优化更改的 1.其中将静态顺序表中的数组数据类型改成了指针类型方便内存的开辟 2.多增加了一个容量的变量来表示顺序表的容量 3.初始化的时候需要给*data动态开辟空间...
  • IT_iverson
  • IT_iverson
  • 2017-07-28 12:01:52
  • 331
收藏助手
不良信息举报
您举报文章:数据结构动态顺序表
举报原因:
原因补充:

(最多只允许输入30个字)