(五)栈的顺序存储设计与实现

栈的顺序存储设计与实现

1、stack概念

    栈是一种特殊的线性表;栈仅能够在线性表的一段进行操作;栈顶(top)是允许操作的一端;栈底(bottom)是不允许操作的一端。

 线性表的顺序存储来模拟栈的顺序存储时,在尾部添加或者删除元素,不会涉及到数组元素的大量移动。  

2、设计与实现

    栈顺序存储的实现思路基本与线性表的顺序存储思路一致,可参考前面文章理解。点击打开链接

3、代码

(1)seqStack.h

#pragma once 
#ifndef _MY_SEQSTACK_H_
#define _MY_SEQSTACK_H_

typedef void SeqStack;

SeqStack* SeqStack_Create(int capacity);

void SeqStack_Destory(SeqStack* stack);

void SeqStack_Clear(SeqStack* stack);

int SeqStack_Push(SeqStack* stack, void* item);

void* SeqStack_Pop(SeqStack* stack);

void* SeqStack_Top(SeqStack* stack);

int SeqStack_Size(SeqStack* stack);

int SeqStack_Capacity(SeqStack* stack);

#endif //_MY_SEQSTACK_H_

(2)seqStack.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "seqstack.h"
#include "seqlist.h"

//创建栈 相当于创建线性表
SeqStack* SeqStack_Create(int capacity)
{
	return SeqList_Create(capacity);
}

//销毁栈 相当于销毁线性表
void SeqStack_Destory(SeqStack* stack)
{
	SeqList_Destory(stack);
}
 
//清空栈 相当于清空线性表
void SeqStack_Clear(SeqStack* stack)
{
	SeqList_Clear(stack);
}

//向栈中压入元素 相当于 向线性表的尾部插入元素
int SeqStack_Push(SeqStack* stack, void* item)
{
	return SeqList_Insert(stack, item, SeqList_Length(stack));
}

//从栈中弹出元素 相当于从线性表中删除一个元素
void* SeqStack_Pop(SeqStack* stack)
{
	return SeqList_Delete(stack, SeqList_Length(stack) - 1);
}

//获取栈顶元素 相当于获取线性表的尾部元素
void* SeqStack_Top(SeqStack* stack)
{
	return SeqList_Get(stack, SeqList_Length(stack) - 1);
}

//获取栈的大小 相当于获取线性表的实际长度
int SeqStack_Size(SeqStack* stack)
{
	return SeqList_Length(stack);
}

//获取栈的容量 相当于获取线性表的容量
int SeqStack_Capacity(SeqStack* stack)
{
	return SeqList_Capacity(stack);
}

(3)具体实现

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "seqstack.h"

typedef struct Teacher
{
	int age;
	char name[64];
}Teacher;

void maindm006()
{
	int ret = 0, i = 0;
	int a[10];

	//创建栈
	SeqStack* stack = NULL;
	stack = SeqStack_Create(10);
	if (stack == NULL)
	{
		ret = -1;
		printf("func SeqStack_Create() err:%d\n", ret);
		return ;
	}

	//压栈
	for (i = 0; i < 5; i++)
	{
		a[i] = i + 1;
		SeqStack_Push(stack, &a[i]);
	}

	//打印栈的容量
	printf("The stack's capacity:%d \n", SeqStack_Capacity(stack));
	//打印栈的长度
	printf("The stack's length:%d \n", SeqStack_Size(stack));
	//栈顶元素
	printf("The stack's Top:%d \n", *((int *)SeqStack_Top(stack)));

	while (SeqStack_Size(stack) > 0)
	{
		int tmp = *((int*)SeqStack_Pop(stack));
		printf("tmp:%d ", tmp);
	}
	printf("\n");

	system("pause");
	return;
	/*
	SeqStack* SeqStack_Create(int capacity);
	void SeqStack_Destory(SeqStack* stack);
	void SeqStack_Clear(SeqStack* stack);
	int SeqStack_Push(SeqStack* stack, void* item);
	void* SeqStack_Pop(SeqStack* stack);
	void* SeqStack_Top(SeqStack* stack);
	int SeqStack_Size(SeqStack* stack);
	int SeqStack_Capacity(SeqStack* stack);
	*/
}

猜你喜欢

转载自blog.csdn.net/ailunlee/article/details/79889511
今日推荐