代码如下:

#include<stdio.h>
#include<stdlib.h> typedef struct
{
char *base;
char *top;
int stacksize;
}sqStack; //////////////////////////////////////
//创建一个栈
#define STACK_SIZE 100
void initstack(sqStack *stack )
{
stack->base = (char*)malloc( STACK_SIZE * sizeof(char));
if (!stack->base)
{
exit(0);
}
stack->top = stack->base;
stack->stacksize = STACK_SIZE;
}
////////////////////////////////////
//入栈操作
#define STACK_MORE 10
void Push(sqStack *stack , char c)
{
if (stack->top - stack->base > stack->stacksize)
{
stack->base = (char*)realloc(stack->base , (stack->stacksize + STACK_MORE) * sizeof(char));
if (!stack->base)
{
exit(0);
} stack->top = stack->base + stack->stacksize;
stack->stacksize = stack->stacksize + STACK_MORE;
}
*(stack->top) = c;
stack->top++;
}
//////////////////////////////////////
//出栈操作
void Pop(sqStack *stack , char *c)
{
if (stack->base == stack->top)
{
return;
}
*c = *--(stack->top);
}
///////////////////////////////////////
//清空栈
void ClearStack(sqStack *stack)
{
stack->top = stack->base;
}
//////////////////////////////////////
//销毁一个栈
void destoryStack(sqStack *stack)
{
for (size_t i = 0; i < stack->stacksize; i++)
{
free(stack->base);
stack->base++;
}
stack->base=stack->top = NULL;
stack->stacksize = 0;
} int main()
{
sqStack stack;
char c=1;
printf("请安任意键创建一个栈...\n");
getchar();
initstack(&stack);
printf("创建成功!\n");
printf("请输入要压入栈的一个字符串(读取到0截至): ");
while ((c = getchar()) != '\n')
{
//scanf("%c",&c);
//fflush(stdin);
if (c!='\n')
{
Push(&stack , c);
}
}
printf("压入字符完成,正在打印字符串...\n");
for (size_t i = 0; i < (stack.top - stack.base); i++)
{
printf("%c",*(stack.base + i));
}
putchar('\n');
printf("请输入要弹出几个字符:");
int k;
scanf("%d",&k);
while (k)
{
k--;
Pop(&stack , &c);
printf("字符%c已弹出!\n",c);
}
printf("弹出字符完成,正在打印字符串...\n");
for (size_t i = 0; i < (stack.top - stack.base); i++)
{
printf("%c",*(stack.base + i));
}
putchar('\n');
printf("接下来你可以选择清空(输入1)或者销毁(输入2)这个栈:");
scanf("%d",&k);
fflush(stdin);
switch (k)
{
case 1:
ClearStack(&stack);
if (stack.top == stack.base)
{
printf("清空完成!");
}
break;
case 2:
destoryStack(&stack);
if(stack.base == NULL && stack.top == NULL && stack.stacksize == 0)
{
printf("已成功销毁!");
}
break;
default:
break;
} return 0;
}

  

运行结果:

最新文章

  1. 2014 39th ACM-ICPC 北京赛区 总结
  2. JavaScript学习笔记——数据类型强制转换和隐式转换
  3. WPF 中Frame + Page 的使用
  4. ecshop编辑器fckeditor换百度ueditor编辑器教程
  5. Win10环境下的Scrapy结合Tor进行匿名爬取
  6. 关于MD5校验和java工程下的校验
  7. O-C-11-利用类方法做一个简单的计算器
  8. 设置session的生命周期(php)
  9. Python学习(一) Python安装配置
  10. springmvc之单元测试(MockMvc)-独立测试
  11. 什么是WEBserver? 经常使用的WEBserver有哪些?
  12. scala的map操作
  13. Python常用模块-时间模块
  14. async-await用法
  15. 【转】反编译D-Link路由器固件程序并发现后门
  16. class example of C++
  17. LeetCode题解之Remove Nth Node From End of List
  18. 1.js基础(以通俗易懂的语言解释JavaScript)
  19. Node.js模块定义总结
  20. udgrade rubygems-update

热门文章

  1. 【JMeter_17】JMeter逻辑控制器__随机顺序控制器&lt;Random Order Controller&gt;
  2. 微信小程序入门基础
  3. 手机商品分享样式(纯html+css)
  4. 30_栈的定义.swf
  5. 2、尚硅谷_SSM高级整合_使用ajax操作实现页面的查询功能
  6. MFC文档视图中窗口切换 (2012-05-11 18:32:48)
  7. 超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购
  8. python 类中方法总结 --- 实例方法、类方法、静态方法
  9. 一.3.序列化使用之idc资源与api文档
  10. models.py连接mysql