#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
int data ;
struct Node * pNext;
}*PNODE ,NODE ;

typedef struct stack
{
PNODE pTop;
PNODE pBottom;
}*PSTACK ,STACK;
void init(PSTACK pS);
void push(PSTACK pS,int val);
void show(PSTACK pS);
bool is_empty(PSTACK pS);
bool pop(PSTACK pS,int * pVal);
void clear(PSTACK pS);
int main()
{
STACK S ;//定义了一个静态的栈,是程序员不能自己释放的
int val ;
init(&S);
push(&S,1);
push(&S,2);
push(&S,3);
push(&S,4);
show(&S);
if(pop(&S,&val))
{
printf("出栈成功,出栈的元素是:%d\n",val);
}
else printf("出栈失败!");
show(&S);
clear(&S);
show(&S);
}
void init(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
pS->pBottom =pS->pTop ;
pS->pTop->pNext = NULL ;

}
void push(PSTACK pS,int val)
{
PNODE pNew =(PNODE)malloc(sizeof(NODE));
pNew->data =val;
pNew->pNext =pS->pTop;
pS->pTop =pNew ;
}
void show(PSTACK pS)
{
PNODE p =pS->pTop ;
while(p!=pS->pBottom)
{
printf("%d ",p->data);
p=p->pNext ;
}
printf("\n");
}
bool is_empty(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
return true ;
else return false ;
}
bool pop(PSTACK pS,int * pVal)
{
if(is_empty(pS))
{
return false ;
}
else
{
PNODE r = pS->pTop;
*pVal =r->data;
pS->pTop = r->pNext;
free(r);
r=NULL;
}
return true ;
}
void clear(PSTACK pS)
{
if(is_empty(pS))
{
return ;
}
else
{
PNODE p =pS->pTop;
PNODE q ;
while(q!=pS->pBottom)
{
q=p->pNext;
free(p);
p=q ;

}
}
pS->pTop=pS->pBottom;
}

C语言 栈的初始化,入栈,出栈,判断栈是否为空,清空栈等函数的更多相关文章

  1. 剑指offer-面试题22.栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...

  2. 面试 16:栈的压入压出队列(剑指 Offer 第 22 题)

    我们今天继续来看看周五留下的习题: 面试题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如:压入序列为{1,2,3,4,5},那{ ...

  3. 【剑指offer】栈的压入弹出序列,C++实现(举例)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...

  4. 剑指offer21:第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。(注意:这两个序列的长度是相等的)

    1 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...

  5. 剑指offer - 栈的压入弹出序列 - JavaScript

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...

  6. 剑指Offer20 栈的压入弹出序列是否正确

    /************************************************************************* > File Name: 20_IsPopO ...

  7. 剑指offer 栈的压入弹出 顺序

    判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...

  8. Go语言实现:【剑指offer】栈的压入、弹出序列

    该题目来源于牛客网<剑指offer>专题. 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5 ...

  9. 【Java】 剑指offer(31) 栈的压入、弹出序列

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否 ...

随机推荐

  1. Linux分区工具-parted

    parted用于操纵磁盘分区的程序,通常用于规则大小超过2T的分区,也可用于小分区的规划:它支持多种分区表格式,包括MS-DOS(MBR)和GPT:这对于为新操作系统创建空间,重新组织磁盘使用以及将数 ...

  2. proptypes介绍

    开始 prop-types的主要作用:对props中数据类型进行检测及限制 引用方法:import PropTypes from 'prop-types' 用法: // 基本用法 用来检测数据类型 c ...

  3. AD常用命令以及概念

    活动目录服务器常用命令合集如下: net accounts  查看第一台域控的计算机角色net accounts   查看计算机角色net share      查看共享netdom query fs ...

  4. LaTex安装介绍

    写在前面 很多的会议.期刊要求投稿使用LaTex编辑,而不是Word,使用好LaTex后,论文的排版任务确实会变得轻松. 1.下载软件 LaTex有很多衍生版,常用的推荐是Tex live,安装方式选 ...

  5. Kafka消费者没有收到通知的分析

    今天遇到两位三方人员跟我反馈,某微服务的异步接口功能不正常了,由于该异步接口采用Kafka异步消息的方案,对方说没有收到Kafka给消费者的通知,根据此问题,联系了相关人员进行了分析: (一)明确环境 ...

  6. IntelliJ IDEA 2018.3.2 永久破解

    PS:动手能力强的来,手残的去淘宝买吧,大概15块钱1年.建议看完后在动手,有一个全局观,浪费不了多少时间 一. 下载破解补丁文件 链接:https://pan.baidu.com/s/1wFp14t ...

  7. 获取现有Table中某些字段

    //dtH System.Data.DataTable dttemp = new System.Data.DataTable(); DataView tempDv = dtH.DefaultView; ...

  8. DOM节点的属性和方法

    DOM DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model).它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行 ...

  9. python全栈学习 day03

    换行符: \n 制表符: \t 字符串截取:顾头不顾尾 s[首:尾:步长] 首--->尾走向 和 步长方向一致 s[0:4:2] s[4:0:-2] a = "qwertyui&quo ...

  10. 题解【AcWing272】最长公共上升子序列

    题面 一道线性 DP 好题. 设 \(dp_{i,j}\) 表示在所有 \(a_{1\dots i}\),\(b_{1\dots j}\) 的子序列中,以 \(b_j\) 结尾的最长公共上升子序列的最 ...