⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sack.c

📁 栈的基本应用!
💻 C
字号:
#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h>
#define StackSize 100//储存空间初始分配量 
#define StackIncrement 10//储存空间分配增量
#define TURE 1
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define FALSE 0
typedef char ElemType;
typedef int Status; 
typedef struct 
{
ElemType *top;
ElemType *base;
int stacksize;
}SqStack;
Status StackTraverse(SqStack S,Status (*visit)());



Status InitStack(SqStack **S)
{
(*S)=(SqStack *)malloc(sizeof(SqStack));
(*S)->base=(ElemType *)malloc(StackSize*sizeof(ElemType));
if(!(*S)->base) exit(OVERFLOW);
(*S)->top=(*S)->base ;
(*S)->stacksize=StackSize;
return OK;        
} //初始化栈

Status GetTop(SqStack S,ElemType *e) 
{
if(S.base==S.top) return ERROR;
e=(S.top-1);
return OK;
}//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROW

Status Push(SqStack *S,ElemType e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(ElemType *)realloc(S->base,(StackSize+StackIncrement)*sizeof(ElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base+StackSize;
S->stacksize=StackSize+StackIncrement;
}
*(S->top++)=e;
return OK;
}//插入e为新的栈顶元素

Status Pop(SqStack *S,ElemType *e)
{
if(S->top==S->base) return ERROR;
*e=*--S->top;
return OK;
}//若栈不空,则删除S栈顶元素,用e返回其值,并返回OK,否则返回ERROW


Status StackEmpty(SqStack S)
{
if(S.top==S.base)
return TURE;
else return FALSE;
}



Status Print(ElemType *e)
{
printf("%c\n",*e);
      
}

Status StackTraverse(SqStack S,Status (*visit)())
{
ElemType *p,*q;
p=S.base ;q=S.top;
 while(p!=q)
     visit(p++);
}



int main(int argc, char *argv[])
{
SqStack *s;ElemType e;char ch;
InitStack(&s);
printf("输入初始栈\n");
while((ch=getchar()) !='\n')
{
Push(s,ch);
}
StackTraverse(*s,Print);


printf("新元素入栈\n");
scanf("%c",&ch); 
Push(s,ch);
StackTraverse(*s,Print);

printf("出栈\n");
while(! StackEmpty(*s))
{

Pop(s,&e) ;
printf("%c\n",e);
}
  system("PAUSE");	
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -