栈的基本操作c语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//Status是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef int SetElemType;
typedef SetElemType ElemType;
#include "tou.h"
#include <stdio.h>
#include <malloc.h>
{
if((*S).top == (*S).base)
return 0;
*e = *--(*S).top;
//这个等式的++ *优先级相同,但是它们的运算方式,是自右向左
return 1;
}
//销毁栈S,S不再存在。
int DestroyStack(SqStack *S)
{
free((*S).base); //释放栈底的空间,并置空
int StackLength(SqStack S)
{
//栈顶指针减去栈底指针刚好等于长度,因为栈顶指针指向当前栈
//顶元素的下一个位置。
return S.top - S.base;
}
//若栈不空,则用e返回S的栈顶元素,并返回1;否则返回0。
int GetTop(SqStack S,SElemType *e)
typedef char SElemType; //栈的元素类型
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
//栈的顺序存储表示P46
typedef struct SqStack
{
SElemType *base; //在栈构造之前和销毁之后,base的值为NULL
if( !(*S).base )
exit(OVERFLOW); //存储分配失败
(*S).top = (*S).base; //栈底与栈顶相同表示一个空栈
(*S).stacksize = STACK_INIT_SIZE;
return 1;
}
//若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。
//初始化栈。
printf("输入数据个数:");
scanf("%d",&n);
printf("输入数据:");
Biblioteka Baidufor(j = 1; j <= n; j++){scanf("%d",&num);
Push(&s, num);}
printf("栈中元素依次为:");
StackTraverse(s,visit);
SqStack s;
SElemType e;
//创建一个顺序栈。
if(InitStack(&s) == 1)
printf("顺序栈创建成功!\n");
//查看栈的长度。
printf("栈的长度是%d\n", StackLength(s));
//查看栈是否为空。
printf("栈空否:%d(1:空0:否)\n",StackEmpty(s));
(*S).base = NULL;
(*S).top = NULL;
(*S).stacksize = 0;
return 1;
}
//把S置为空栈。
int ClearStack(SqStack *S)
{
(*S).top = (*S).base; //栈底栈顶相同为空栈
return 1;
}
//返回S的元素个数,即栈的长度。
{
if(S.top > S.base)
{
*e = *(S.top-1); //栈顶指针的下一个位置为栈顶元素
return 1;
}
else
return 0;
}
//从栈底到栈顶依次对栈中每个元素调用函数visit()。
int StackTraverse(SqStack S,int(*visit)(SElemType))
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++=e;
//这个等式的++ *优先级相同,但是它们的运算方式,是自右向左
return 1;
}
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。
int Pop(SqStack *S,SElemType *e)
Pop(&s,&e);
printf("弹出的栈顶元素e=%d\n",e);
GetTop(s,&e);
int StackEmpty(SqStack S)
{
if(S.top == S.base)
return 1;
else
return 0;
}
//插入元素e为新的栈顶元素。
int Push(SqStack *S, SElemType e)
{
if((*S).top - (*S).base >= (*S).stacksize) //栈满,追加存储空间
{
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
if( !(*S).base )
exit(0); //存储分配失败
(*S).top = (*S).base+(*S).stacksize;
{
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return 1;
}
int visit(SElemType c)
{
printf("%d ",c);
return 1;
}
#include "toutou.h"
int main()
{
int j,n,num;
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack; //顺序栈
//构造一个空栈S。
int InitStack(SqStack *S)
{
//为栈底分配一个指定大小的存储空间
(*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
typedef int Status;
typedef int SetElemType;
typedef SetElemType ElemType;
#include "tou.h"
#include <stdio.h>
#include <malloc.h>
{
if((*S).top == (*S).base)
return 0;
*e = *--(*S).top;
//这个等式的++ *优先级相同,但是它们的运算方式,是自右向左
return 1;
}
//销毁栈S,S不再存在。
int DestroyStack(SqStack *S)
{
free((*S).base); //释放栈底的空间,并置空
int StackLength(SqStack S)
{
//栈顶指针减去栈底指针刚好等于长度,因为栈顶指针指向当前栈
//顶元素的下一个位置。
return S.top - S.base;
}
//若栈不空,则用e返回S的栈顶元素,并返回1;否则返回0。
int GetTop(SqStack S,SElemType *e)
typedef char SElemType; //栈的元素类型
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
//栈的顺序存储表示P46
typedef struct SqStack
{
SElemType *base; //在栈构造之前和销毁之后,base的值为NULL
if( !(*S).base )
exit(OVERFLOW); //存储分配失败
(*S).top = (*S).base; //栈底与栈顶相同表示一个空栈
(*S).stacksize = STACK_INIT_SIZE;
return 1;
}
//若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。
//初始化栈。
printf("输入数据个数:");
scanf("%d",&n);
printf("输入数据:");
Biblioteka Baidufor(j = 1; j <= n; j++){scanf("%d",&num);
Push(&s, num);}
printf("栈中元素依次为:");
StackTraverse(s,visit);
SqStack s;
SElemType e;
//创建一个顺序栈。
if(InitStack(&s) == 1)
printf("顺序栈创建成功!\n");
//查看栈的长度。
printf("栈的长度是%d\n", StackLength(s));
//查看栈是否为空。
printf("栈空否:%d(1:空0:否)\n",StackEmpty(s));
(*S).base = NULL;
(*S).top = NULL;
(*S).stacksize = 0;
return 1;
}
//把S置为空栈。
int ClearStack(SqStack *S)
{
(*S).top = (*S).base; //栈底栈顶相同为空栈
return 1;
}
//返回S的元素个数,即栈的长度。
{
if(S.top > S.base)
{
*e = *(S.top-1); //栈顶指针的下一个位置为栈顶元素
return 1;
}
else
return 0;
}
//从栈底到栈顶依次对栈中每个元素调用函数visit()。
int StackTraverse(SqStack S,int(*visit)(SElemType))
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++=e;
//这个等式的++ *优先级相同,但是它们的运算方式,是自右向左
return 1;
}
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。
int Pop(SqStack *S,SElemType *e)
Pop(&s,&e);
printf("弹出的栈顶元素e=%d\n",e);
GetTop(s,&e);
int StackEmpty(SqStack S)
{
if(S.top == S.base)
return 1;
else
return 0;
}
//插入元素e为新的栈顶元素。
int Push(SqStack *S, SElemType e)
{
if((*S).top - (*S).base >= (*S).stacksize) //栈满,追加存储空间
{
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
if( !(*S).base )
exit(0); //存储分配失败
(*S).top = (*S).base+(*S).stacksize;
{
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return 1;
}
int visit(SElemType c)
{
printf("%d ",c);
return 1;
}
#include "toutou.h"
int main()
{
int j,n,num;
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack; //顺序栈
//构造一个空栈S。
int InitStack(SqStack *S)
{
//为栈底分配一个指定大小的存储空间
(*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));