博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆栈数据结构的C语言实现
阅读量:4051 次
发布时间:2019-05-25

本文共 2345 字,大约阅读时间需要 7 分钟。

#define OVERFLOW -1

#define ERROR -2
#define OK 1
#define NULL 0
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#include <stdio.h>
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
int CreatStack(SqStack *S)
{
 
(*S).base=(char *)malloc(STACK_INT_SIZE*sizeof(char));
 
if(!(*S).base) return ERROR;
 
(*S).top=(*S).base;
 
(*S).stacksize=STACK_INT_SIZE;
 
return OK;
}
int StackLength(SqStack S)
{SqStack p;
 
int length=0;
 
p=S;
 
while(p.base!=p.top)
 
 
{p.top--;
 
 
 
length++;
 
 
}
 
return length;
}
int GetTop(SqStack S,char *e)
{if(S.base==S.top) 
return ERROR;
 
*e=*(S.top-1);
 
return OK;
}
int Push(SqStack *S,char e)
{
 
if((*S).top-(*S).base>=(*S).stacksize){
 
(*S).base=(char *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(char));
 
if((*S).base) 
exit(OVERFLOW);
 
(*S).top=(*S).base+(*S).stacksize;
 
(*S).stacksize+=STACKINCREMENT;
 
}
 
*((*S).top)++=e;
 
return OK;
}
int Pop(SqStack *S,char *e)
{if((*S).top==(*S).base)
 
 
return ERROR;
 
*e=*--(*S).top;
 
return OK;
}
int DestroyStack(SqStack *S)
{char *p;
 
while((*S).top!=(*S).base)
 
{p=(*S).top;
 
--(*S).top;
 
free(p);
 
}
 
return OK;
}
int ClearStack(SqStack *S)
{int length,n;
 
if(S->base==S->top) return OK;
 
else
 
 
{while(S->base!=S->top)
 
 
 
 
 
*(--S->top)=NULL;
 
 
}
 
return OK;
}
int Print(SqStack *S)
{
 
char *p;
 
for(p=S->top-1;p>=S->base;p--)
 
 
printf("%c",*p);
 
printf("\n");
 
return OK;
}
int StackEmpty(SqStack S)
{if(S.top==S.base)
 
return OK;
 
else
 
return 
NULL;
}
main()
{SqStack *stack,*stack1,*stack2;
 
char *c,e;
 
stack=(SqStack *)malloc(sizeof(SqStack));
 
stack1=(SqStack *)malloc(sizeof(SqStack));
 
stack2=(SqStack *)malloc(sizeof(SqStack));
 
c=(char *)malloc(sizeof(char));
 
clrscr();
 
CreatStack(stack);
 
CreatStack(stack1);
 
CreatStack(stack2);
 
printf("Have created a stack,the length of it is %d\n",StackLength(*stack));
 
if(!StackEmpty(*stack))
 
printf("Stack is not empty!\n");
 
else
 
printf("Stack is empty!\n");
 
printf("Please input chars(End with '!'):\n");
 
while((e=getchar())!='!')
 
 
Push(stack,e);
 
printf("Print the stack:");
 
Print(stack);
 
printf("The length of stack is%d\n",StackLength(*stack));
 
while(!StackEmpty(*stack)) {Pop(stack,c); Push(stack1,*c);}
 
while(!StackEmpty(*stack1)) {Pop(stack1,c); Push(stack2,*c);}
 
while(!StackEmpty(*stack2)) {Pop(stack2,c); Push(stack,*c);}
 
printf("Reverse print the stackis:");
 
Print(stack);
 
DestroyStack(stack);
 
DestroyStack(stack1);
 
DestroyStack(stack2);
 
getch();
}

转载地址:http://qdpci.baihongyu.com/

你可能感兴趣的文章
Springboot + easyui + mybatis 高级搜索功能实现
查看>>
k8s 踩坑笔记
查看>>
SpringCloud Seata Nacos 整合教程和坑
查看>>
nacos 本地覆盖远程 本地优先
查看>>
java 查询内存泄漏
查看>>
httpclient4.5 绕过ssl证书校验 -看别人文章解决不了的,看下我这个
查看>>
基于webpack的vue语法糖实现思路
查看>>
jenkins流水线脚本 从sonar代码扫描,到maven构建,到docker打包,到k8s发布
查看>>
微服务项目占用内存过多机器扛不住怎么办?服务allinone设计
查看>>
项目快速开发经验
查看>>
LambdaQueryWrapper动态加过滤条件 动态Lambda(首发)
查看>>
javascript 大数值进行按位运算
查看>>
jacob 设置 插入word 的图片大小
查看>>
html2image html转换为图片 生成快照 java
查看>>
GPRS+wifi 云巡更系统开放sdk api 可以和OA CRM 对接巡更系统
查看>>
浏览器页面之间推送消息 A窗口给B窗口推送消息 用于cef多个browser之间通信
查看>>
冒泡排序的2种写法
查看>>
java 使用html写UI 做winform win桌面客户端程序(一)
查看>>
jxbrowser 教程 1 使用jxbrowser 创建简单的浏览器 使用html5+java写cs客户端
查看>>
jxbrowser 监听所有网络请求 jxbrowser 系列教程2
查看>>