数据结构C语言实现----清空、销毁一个栈
代码如下:
#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;
}
运行结果:

数据结构C语言实现----清空、销毁一个栈的更多相关文章
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...
- [数据结构]C语言栈的实现
有始有终,所以我准备把各种数据结构都讲一次,栈也分顺序存储和链式储存,这里我们选择链式存储来讲,顺序存储没有难度(链式其实也是) 作为数据结构中最简单的栈,这里不会说太多,首先考虑一下下面的model ...
- 如何轻松使用 C 语言实现一个栈?
什么是数据结构? 数据结构是什么?要了解数据结构,我们要先明白数据和结构,数据就是一些int char 这样的变量,这些就是数据,如果你是一个篮球爱好者,那么你的球鞋就是你的数据,结构就是怎么把这些数 ...
- 深入浅出数据结构C语言版(7)——特殊的表:队列与栈
从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...
- 数据结构和算法之栈和队列三:自定义一个栈包含min函数
我们都知道一个栈的特点是后进先出,如果我们要实现在O(1)的时间内找到一个栈里面的最小值,我们应该怎么解决?如果我们采用遍历获取的思路那必然所需要的时间是O(N)与我们所需要的要求明显不符合,这时候我 ...
- 基于自定义的动态数组实现一个栈(Java语言)
关于动态数组,参见我的上一篇关于动态数组的博文https://www.cnblogs.com/inu6/p/11717129.html 1.什么是栈? (1)只能从一端添加元素,也只能从一端取出元素, ...
- C语言的函数调用过程(栈帧的创建与销毁)
从汇编的角度解析函数调用过程 看看下面这个简单函数的调用过程: int Add(int x,int y) { ; sum = x + y; return sum; } int main () { ; ...
- 数据结构( Pyhon 语言描述 ) — — 第7章:栈
栈概览 栈是线性集合,遵从后进先出原则( Last - in first - out , LIFO )原则 栈常用的操作包括压入( push ) 和弹出( pop ) 栈的应用 将中缀表达式转换为后缀 ...
随机推荐
- 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- MySQL语句的使用
进入数据库 mysql -u root -pmysql (u用户名,p密码)#如果不想让其他人看到就直接一个p然后回车再打密码 select version(); 查看数据库版本 sele ...
- 序列推荐(transformer)
目录 Attention演进(RNN&LSTM&GRU&Seq2Seq + Attention机制) LSTM GRU Seq2Seq + Attention机制 Attent ...
- tableau入门学习笔记--分页功能
最近在使用tableau来制作报表,对于tableau也是第一次接触并使用,每天学习些新的功能来记录在博客里,给他人方便,也给自己方便 tableau分页功能 很多时候由于工作表过长而出现拖拽条,如果 ...
- C#由转换二进制所引起的思考,了解下?
前言 最近遇到很有意思转换二进制的问题,有部分童鞋俨然已了解,可能也有一部分童鞋没碰到过也就不知情,这里我们来深入学习下转换二进制所带来的问题. 二进制转换问题 假设现在我们有一个int类型的数据,它 ...
- WSL配置高翔vslam环境
WSL配置高翔vslam环境 步骤: 安装 windows wls 配置 g++ cmake 环境 编译运行一下例子 1. window启用 wsl 前往 "启用或关闭 Windows 功能 ...
- css盒子模型的深入理解,在块级、行内元素的区别和特性
css盒子模型用于处理元素的内容.内边距.边框和外边距的方式简称.元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的 ...
- NOI Online #3 提高组 T1水壶 题解
题目描述 有 n 个容量无穷大的水壶,它们从 1∼n 编号,初始时 i 号水壶中装有 Ai 单位的水. 你可以进行不超过 k 次操作,每次操作需要选择一个满足 1≤x≤n−1 的编号 x,然后把 x ...
- NOIP 2016 洛谷 P2827 蚯蚓 题解
题目传送门 展开 题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手 ...
- python入门005
垃圾回收机制详解(了解) 1.引用计数 x = 10 # 直接引用 print(id(x)) y = x z = x l = ['a', 'b', x] # 间接引用 print(id(l[2])) ...