数据结构之栈的实现--顺序栈(C语言)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40411915/article/details/82721433

学习参考: 严蔚敏: 《数据结构-C语言版》

要点:

栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)

基本操作

  1. 入栈
  2. 出栈
  3. 读栈顶元素值
  4. 建栈
  5. 栈满
  6. 栈空
  7. 清空栈
  8. 销毁栈

代码实现

 栈结构定义:

typedef struct 
{
	int* base;
	int top;
	int size;
}SeqStack,* pStack;

建栈

int initStack(pStack s, int size)
{
	if(!s)
		return 0;
	if(size <1)
		size = 10;
	s->base = (int*)malloc(sizeof(int)*size);
	if(!s->base)
		return 0;
	s->top = 0;
	s->size = size;
	return 1;
}

栈满

int stackFull(pStack s)
{
	if(!s)
		return -1;
	return s->top>s->size;
}

栈空

int stackEmpty(pStack s)
{
	return s->top<=0;
}

入栈

int Push(pStack s,int data)
{
	if(!s|| stackFull(s))
		return 0;
	s->base[s->top] = data;
	s->top++;
	return 1;
}

出栈

int pop(pStack s,int* data)
{
	if(!s || stackEmpty(s))
		return 0;
	*data = s->base[s->top-1];
	s->top--;
	return 1;
}

读栈顶元素值

int getTop(pStack s,int* data)
{
	if(!s || stackEmpty(s))
		return 0;
	*data = s->base[s->top-1];
	return 1;
}

清空栈

int ClearStack(pStack s)
{
	if(!s)
		return 0;
	s->top = 0;
	s->size = 0;
	return 1;
}

销毁栈

int destroyStack(pStack s)
{
	int i = 0;
	if(!s)
		return 0;
	for(i=0; i<s->top; ++i)
	{
		free(s->base);
		s->base++;
	}
	s->top = -1;
	s->size = -1;
	return 1;
}

测试代码

#include <stdio.h>
#include "SeqStack.h"

int main()
{
	SeqStack stack;
	int i =0, val = -1, tag=-1;
	initStack(&stack, 10);
	for(i=0; i<15; ++i)
		Push(&stack, i);
	pop(&stack, &val);
	getTop(&stack, &tag);
	printf("%d ...\n", tag);
	destroyStack(&stack);
	return 0;
}

写在最后

文章记录本人学习所得, 如有所错误, 欢迎留言指出交流, 大神请键盘下留人 ! ! ! 

猜你喜欢

转载自blog.csdn.net/weixin_40411915/article/details/82721433