动态顺序表的基本操作

2人阅读 评论(0) 收藏 举报

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;
}

查看评论

简单实现动态顺序表

SeqList.h#pragma once #include typedef int DataType; typedef struct SeqList{ DataType *arr; siz...
  • demi_hu
  • demi_hu
  • 2016-12-05 20:23:58
  • 166

动态顺序表基本操作实现

动态顺序表实际是在静态顺序表改变过来的,基本思想和静态顺序表差不多,唯一的区别就是动态分配了空间,空间不够可以增加,弥补了静态顺序表的缺陷。基本操作1.初始化2.扩大表的容量3.查找指定元素4.尾插元...
  • yc1515707718
  • yc1515707718
  • 2018-03-24 11:57:24
  • 28

动态顺序表的实现和增删操作。

 对与线性表中的顺序表,有静态顺序表,和动态顺序表。关于静态顺序表的实现以及一些操作,在本博客内有相关内容,那么就不过多介绍,动态顺序表基本与静态顺序表的一些操作一样,比如,查找,删除等,不一样的就是...
  • GangStudyIT
  • GangStudyIT
  • 2018-02-08 15:36:31
  • 52

静态与动态顺序表操作的C语言实现

1.操作静态顺序表#include #include #define MAXSIZE 10//插入void InsertElem(int sqlist[], int *len, int i, int ...
  • IT_10
  • IT_10
  • 2016-09-26 14:18:58
  • 437

顺序线性表的基本操作(C语言实现)

//线性表顺序存储 #include #include #include typedef  struct{ int  *elem;      //elem表示存...
  • Giser_D
  • Giser_D
  • 2017-09-28 10:58:04
  • 183

动态顺序表基本操作

SeqlistD.h文件 typedef int DataType; typedef unsigned int size_t; typedef struct SeqListD { Da...
  • Paranoid_cc
  • Paranoid_cc
  • 2018-03-31 21:31:38
  • 21

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

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

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

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

c语言动态顺序表的实现

动态顺序表是在静态顺序表的基础上优化更改的 1.其中将静态顺序表中的数组数据类型改成了指针类型方便内存的开辟 2.多增加了一个容量的变量来表示顺序表的容量 3.初始化的时候需要给*data动态开辟空间...
  • IT_iverson
  • IT_iverson
  • 2017-07-28 12:01:52
  • 331
    个人资料
    持之以恒
    等级:
    访问量: 125
    积分: 102
    排名: 126万+
    文章分类
    文章存档