顺序栈的实现
2012-10-16 10:17
134 查看
#include <stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT
10
//函数返回值类型定义
typedef enum { ERROR=0, OK=1,TRUE=1, FALSE = 0, OVERFLOW=-1,
UNDERFLOW=-2 } Status;
//数据元素类型定义
typedef int ElemType;
typedef struct{
ElemType *base;
//栈的存储空间的基地址,即栈底指针
ElemType *top; //栈顶指针
int
maxsize; //栈当前分配的存储容量
}SqStack;
Status visit( ElemType e )
{
printf("e=%d\n",e);
return OK;
}
Status InitStack( SqStack &S )
//构造一个空栈S
{
S.base=(ElemType * )malloc( LIST_INIT_SIZE *
sizeof(ElemType));
if (!S.base) exit(OVERFLOW); //存储分配失败
S.top =
S.base; //栈顶指针也指向栈底,意味着栈为空
S. maxsize =
LIST_INIT_SIZE;
return OK;
}
Status ListEmpty( SqStack S )//判断是否为空
{
if( S.top == S.base
)
return OK;
return ERROR;
}
int ListLength( SqStack &S )//获取顺序栈的长度
{
return
S.top-S.base;
}
Status Push ( SqStack &S, ElemType e )
{
if ( S.top -S.base == S.
maxsize) //栈满,追加存储空间
{
ElemType *newbase;
newbase=( ElemType *)
realloc( S.base, ( S. maxsize + LISTINCREMENT) * sizeof( ElemType
));
if(!newbase) exit (OVERFLOW); //存储分配失败
S.base =
newbase;
S.top=S.base + S. maxsize; //确定新栈的栈顶指针的位置
S.
maxsize += LISTINCREMENT;
//栈的最大容量增加
}
*S.top++=e;
//插入栈顶元素,且栈顶指针增加
return OK;
}
Status Pop( SqStack &S, ElemType &e
)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
{
if ( S.top == S.base
)
return ERROR;
e =* --S.top; //e返回栈顶元素值,-
-S.top表示删除栈顶元素
return OK;
}
Status GetTop(SqStack S, ElemType
&e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
{
if ( S.top == S.base
)
return ERROR;
e =*( S.top -1 );
//e返回栈顶元素值
return OK;
}
Status StackTraverse( SqStack S, Status (*visit)(ElemType))
//若栈不空,则使用visit函数遍历栈的元素并返回OK,否则返回ERROR
{
ElemType *p;
if (S.top ==
S.base)
return ERROR;
p=S.top;
//p指向栈顶
while( p>S.base )
visit(* --p); //通过循环对栈的元素遍历
return OK;
}
Status ClearList( SqStack &S ) //清空栈
{
ElemType e;
while(
Pop(S, e) != ERROR );
return OK;
}
Status DestroyStack( SqStack &S )
{
free( S.base );
S.base = NULL;
return OK;
}
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT
10
//函数返回值类型定义
typedef enum { ERROR=0, OK=1,TRUE=1, FALSE = 0, OVERFLOW=-1,
UNDERFLOW=-2 } Status;
//数据元素类型定义
typedef int ElemType;
typedef struct{
ElemType *base;
//栈的存储空间的基地址,即栈底指针
ElemType *top; //栈顶指针
int
maxsize; //栈当前分配的存储容量
}SqStack;
Status visit( ElemType e )
{
printf("e=%d\n",e);
return OK;
}
Status InitStack( SqStack &S )
//构造一个空栈S
{
S.base=(ElemType * )malloc( LIST_INIT_SIZE *
sizeof(ElemType));
if (!S.base) exit(OVERFLOW); //存储分配失败
S.top =
S.base; //栈顶指针也指向栈底,意味着栈为空
S. maxsize =
LIST_INIT_SIZE;
return OK;
}
Status ListEmpty( SqStack S )//判断是否为空
{
if( S.top == S.base
)
return OK;
return ERROR;
}
int ListLength( SqStack &S )//获取顺序栈的长度
{
return
S.top-S.base;
}
Status Push ( SqStack &S, ElemType e )
{
if ( S.top -S.base == S.
maxsize) //栈满,追加存储空间
{
ElemType *newbase;
newbase=( ElemType *)
realloc( S.base, ( S. maxsize + LISTINCREMENT) * sizeof( ElemType
));
if(!newbase) exit (OVERFLOW); //存储分配失败
S.base =
newbase;
S.top=S.base + S. maxsize; //确定新栈的栈顶指针的位置
S.
maxsize += LISTINCREMENT;
//栈的最大容量增加
}
*S.top++=e;
//插入栈顶元素,且栈顶指针增加
return OK;
}
Status Pop( SqStack &S, ElemType &e
)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
{
if ( S.top == S.base
)
return ERROR;
e =* --S.top; //e返回栈顶元素值,-
-S.top表示删除栈顶元素
return OK;
}
Status GetTop(SqStack S, ElemType
&e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
{
if ( S.top == S.base
)
return ERROR;
e =*( S.top -1 );
//e返回栈顶元素值
return OK;
}
Status StackTraverse( SqStack S, Status (*visit)(ElemType))
//若栈不空,则使用visit函数遍历栈的元素并返回OK,否则返回ERROR
{
ElemType *p;
if (S.top ==
S.base)
return ERROR;
p=S.top;
//p指向栈顶
while( p>S.base )
visit(* --p); //通过循环对栈的元素遍历
return OK;
}
Status ClearList( SqStack &S ) //清空栈
{
ElemType e;
while(
Pop(S, e) != ERROR );
return OK;
}
Status DestroyStack( SqStack &S )
{
free( S.base );
S.base = NULL;
return OK;
}
相关文章推荐
- 顺序栈的实现 C语言版(二)
- C#简单实现顺序队列与链队列
- 队列顺序循环存储实现
- 顺序表上实现堆排序
- 顺序栈之C++实现
- 按之字形顺序打印二叉树Java实现
- KO中对象数组排序时,两个属性的优先顺序不一致时的排序实现
- 数据结构线性表―静态顺序表的实现
- //1.调整数组使奇数全部都位于偶数前面。 //题目: //输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- C语言实现顺序栈
- 顺序表的实现(1)
- 数据结构—线性表的顺序表示与实现
- 队列的顺序存储表示---数组实现
- 利用数组创建的顺序表实现各种功能
- (C语言)顺序表之动态实现
- 数据结构—动态顺序表的实现
- 数据结构——顺序队列的C++实现
- 数组的顺序表示与实现
- 线性表的顺序表示和实现
- Java实现顺序线性表