顺序栈的基本操作实现

这些都是头函数里的内容,也就是保存之后,可以直接

对其进行调用。其中的一个变量stacklen是用来记录栈

的长度的,其实,这个变量可以不要,只是刚开始写时

给它加上了,所以就按这样写了,感觉跟顺序表的写法

差不多可怜可怜

#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;

typedef int Status;
typedef int SElemType;

# define   OK       1
# define   ERROR    0
# define   TRUE     1
# define   FLASE    0
# define   NULL     0
# define   OVERFLOW  -2

typedef  struct{
	SElemType   * base;
	SElemType   * top;
	int     stacksize;
	int     stacklen;
}SqStack;

# define  STACK_INIT_SIZE   100       //存储空间的初始分配量
# define  STACKINCREMENT    10        //存储空间分配增量


Status  InitStack(SqStack &S)         //构造一个空栈S
{
	S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S.base)  exit(OVERFLOW);
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	S.stacklen = 0; 
	return OK;
}

Status DestroyStack(SqStack &S)      //销毁栈S,S不在存在
{
	free(S.base);
	return OK;
}

Status ClearStack (SqStack &S)      //把S置为空栈
{
     S.top = S.base;
	 S.stacklen = 0;
	 return OK;
}

Status StackEmpty(SqStack &S)       //若S为空栈,则返回TRUE,否则返回FALSE
{
	if(S.stacklen == 0)
		return TRUE;
	else
		return FLASE;
}

Status StackLength(SqStack &S)       //返回S的元素个数,即栈的长度
{
	return S.stacklen;
}

Status GetTop(SqStack &S, SElemType &e)       //若栈不空,则用e返回S的栈顶元素,
{
	if(S.stacklen == 0)
		return ERROR;
	else
	{
		e = * (S.top-1);
		return OK;
	}
}

Status Push(SqStack &S, SElemType &e)         //插入元素e为新的栈顶元素
{
	if(S.stacklen == S.stacksize)
	{
		S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
	    if(!S.base)  exit(OVERFLOW);
	    S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT;
	}
	* S.top++ = e;
	S.stacklen++;
	return OK;
}

Status Pop(SqStack &S, SElemType &e)          //删除栈顶元素并用e返回其值
{
	if(S.stacklen == 0) 
		return ERROR;
	e = * --S.top;
	S.stacklen--;
	return OK;
}

Status DisplayStack(SqStack &S)              //从栈底到栈顶依次对栈的元素进行访问
{
	SElemType * p;
    p = S.base;
	while(p != S.top)
	{
		cout<<*p<<" ";
		p++;
	}
	cout<<endl;
	return OK;
}
阅读更多
文章标签: 存储 struct null
个人分类: 数据结构学习
想对作者说点什么? 我来说一句

顺序栈的常用操作 C语言

2013年10月15日 3KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭