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

 对与线性表中的顺序表,有静态顺序表,和动态顺序表。关于静态顺序表的实现以及一些操作,在本

博客内有相关内容,那么就不过多介绍,动态顺序表基本与静态顺序表的一些操作一样,比如,

查找,删除等,不一样的就是增加,销毁,最重要的静态顺序表是建立在栈上的,而动态顺序表是建立在堆上。

 那么我们就在静态的基础上与动态结合加以练习,主要体现在增加,销毁,和结构体建立上不同。

那么我们来看代码。

先是头文件及其声明:

#pragma once

#include<stdio.h>
#include<malloc.h>
//#ifndef __D_SEQLIST_H__
//#define __D_SEQLIST_H__
//#endif 

typedef char CHAR;

typedef struct seqlist
{
	CHAR *elem;
	size_t size;
	size_t capacity;
}seqlist;

seqlist seq;

//打印顺序表
void seqlist_print(seqlist *seq);

//对动态顺序表的初始化
void seqlist_init(seqlist *seq);

//进行顺序表的尾插
void seqlist_push_back(seqlist *seq,CHAR value);

//对容器的扩容
void seqlist_expand_capacity(seqlist *seq);

//对顺序表的销毁
void seqlist_destroy(seqlist *seq);



对与相应函数的实现:

#include "D_seqlist.h"

//打印顺序表
void seqlist_print(seqlist *seq)
{
	size_t i = 0;
	if(seq == NULL)
	{
		return ;
	}
	for(i=0; i< seq->size; i++)
	{
		printf("%c",seq->elem[i]);
	}
	return ;
}

//对动态顺序表的初始化
void seqlist_init(seqlist *seq)
{
	if(seq == NULL)
	{
		return ;
	}
	seq->size = 0;
	seq->capacity = 1;
	seq->elem = (CHAR *)malloc(sizeof(CHAR) * seq->capacity);
}

//容器的空间的扩充,ralloc
void seqlist_expand_capacity(seqlist *seq)
{
	size_t i = 0;
	CHAR *new_data = NULL;//使用char类型
	seq->capacity = 2 * seq->capacity + 1;
	new_data = (CHAR *)malloc(seq->capacity * sizeof(CHAR));
		for(i=0; i < seq->size; i++)
		{
			new_data[i] = seq->elem[i];
		}
		free(seq->elem);
		seq->elem = new_data;
}

//对动态顺序表进行尾插
void seqlist_push_back(seqlist *seq,CHAR value)
{
	if(seq == NULL)
	{
		return ;
	}
	if (seq->size >= seq->capacity)
	{
		seqlist_expand_capacity(seq);
	}
	seq->elem[seq->size] = value;
	seq->size++;
}

//对顺序表的销毁
void seqlist_destroy(seqlist *seq)
{
	if(seq == NULL)
	{
		return ;
	}
	seq->size = 0;
	seq->capacity = 0;
	free(seq->elem);
}


int main()
{
	seqlist_init(&seq);
	seqlist_push_back(&seq,'a');
	seqlist_push_back(&seq,'b');
	seqlist_push_back(&seq,'c');
	seqlist_push_back(&seq,'d');
	//seqlist_destroy(&seq);
	seqlist_print(&seq);
	return 0;
}

主要与静态顺序表不同是就在内存开辟,静态是一开始就已经开辟好的,而动态是在用的时候在开辟。

一个节省了时间而有可能会造成内存浪费或者内存不足,动态与齐相反,是有可能花费时间来减少空间的浪费

也不存在内存分配不足问题。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值