📄 堆栈的基本操作.txt
字号:
definition.h
=================================================
#define INIT_SIZE 100 //存储空间初始分配量
#define INCREMENT 10 //存储空间分配增量
typedef char ElemType;
typedef struct{
ElemType *top, *base; //栈顶指针和栈底指针
unsigned stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
int InitStack(SqStack *);//创建一个空栈
int GetTop(SqStack *); //返回栈顶元素
int Push(SqStack *); //插入栈顶
int Pop(SqStack *); //删除栈顶元素
=============================================================
function.c
====================================================================================
#include<stdio.h>
#include<malloc.h>
#include"definition.h"
int InitStack(SqStack *S) //创建一个空栈
{ S->base=(ElemType *)malloc( INIT_SIZE * sizeof(ElemType) );
if(!S->base) //空间分配失败
return 1;
//空间分配成功
S->top=S->base;//置栈顶指针
S->stacksize=INIT_SIZE;//栈大小
return 0;
}
int GetTop(SqStack *S) //返回栈顶元素
{ if(S->base==S->top)//栈空,返回0
return 0;
return *(S->top - 1);//栈不空,返回栈顶元素
}
int Push(SqStack *S) //插入栈顶
{ if( (unsigned)(S->top - S->base) >= S->stacksize){//栈满,追加存储空间
S->base=(ElemType *)realloc(S->base, (S->stacksize+INCREMENT)*sizeof(ElemType) );
if(!S->base)//分配失败,返回1
return 1;
//分配成功
S->top = S->base + S->stacksize;//置栈顶指针
S->stacksize += INCREMENT;//栈大小
}
printf("请输入一个字符:");
scanf( "%c", S->top++ );//接收输入后,S->top指向栈顶元素的下一个位置
return 0;
}
int Pop(SqStack *S) //删除栈顶元素
{ if(S->base == S->top)//空栈,返回0
return 0;
return *( --(S->top) );//不空,栈顶指针下移(即删除栈顶元素),并且返回栈顶元素
} ===========================================================================================
main.c
============================================================
#include<stdio.h>
#include"definition.h"
int main()
{ SqStack S;
ElemType e;
if( InitStack(&S) ){
printf("创建堆栈失败。\n");
return 1;
}
printf("创建堆栈成功。\n");
if( Push(&S) )
printf("插入失败。\n");
else
printf("插入成功。\n");
if( e=GetTop(&S) )
printf("栈顶元素为:%c\n", e);
else
printf("空栈。\n");
if( e=Pop(&S) )
printf("成功删除了栈顶元素 %c\n", e);
else
printf("空栈。\n");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -