stack怎么删除 c 中怎么创建栈?

[更新]
·
·
分类:互联网
1974 阅读

c

c 中怎么创建栈?

中怎么创建栈?

c语言构建栈就可以了,采用的方式是两种,一种是采用数组建栈,一种是采用指针建栈。
#include#34stdio.h#34
#include#34malloc.h#34
#include#34stdlib.h#34
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef char ElemType
typedef int Status
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct
{
ElemType *base //在栈构造和销毁之后,base的值为NULL
ElemType *top //栈顶指针
int stacksize //当前已分配的存储空间,以元素为单位
}SqStack
// 构造一个空栈S
Status InitStack(SqStack ampS)
{
(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType))
if(!) //存储分配失败
exit (OVERFLOW)

_INIT_SIZE
return OK
}//InitStack
/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////
Status GetTop(SqStack S,ElemType ampe)
{
if()
return ERROR
e*()
return OK
}//GetTop
////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////
Status Push(SqStack ampS,ElemType e)
{
if() //栈满,追加存储空间
{
(ElemType *)realloc(,( STACKINCREMENT) * sizeof(ElemType))
if(!)
exit (OVERFLOW)

STACKINCREMENT
}
* e
return OK
}//Push
////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK否则返回ERROR
Status Pop(SqStack ampS,ElemType ampe)
{
if()
return ERROR
e*
return OK
}//Pop
////////// main() //////////////////////////////
void main()
{
int i
char ch,e,c
SqStack S
InitStack(S)
printf(#
#34)
while(1)
{
printf(#34请选择:#34)
scanf(#34%d#34,ampi)
cgetchar() //*****接受回车符******
switch (i)
{
case 1:
printf(#34请输入要插入的元素:#34)
scanf(#34%c#34,ampch)
Push(S,ch)
break
case 2:
printf(#34弹出栈顶元素:#34)
Pop(S,e)
printf(#34%c
#34,e)
break
case 3:
printf(#34取栈顶元素:#34)
GetTop(S,e)
printf(#34%c
#34,e)
break
case 4:
exit(0)
default:
printf(#34ERROR!Please Reput A Number
#34)
}
}
}这就算是一个建栈

空栈的top为什么-1而不是0?

空栈的top为-1,是因为0是第一个元素,如果用top0就表示有一个元素,不为空。
  栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
  向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。