#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *pNext;
}NODE, * PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;//不变
}STACK, * PSTACK;
void init(PSTACK);
void push(PSTACK, int);
void traverse(PSTACK);
bool empty(PSTACK);
bool pop(PSTACK, int *);
void clear(PSTACK);
int main(void)
{
STACK S; //内存中有了个栈pTop,pBottom
push(&S,122);
push(&S,233);
clear(&S);
traverse(&S);
push(&S,122);
push(&S,233);
traverse(&S);
int val;
if(pop(&S,&val))
{
printf("出栈成功,出栈元素%d\n",val);
}
else
{
printf("出栈失败!");
}
return 0;
}
void init(PSTACK pStack)
{
pStack->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pStack->pTop)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else {
pStack->pBottom = pStack->pTop;
pStack->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;
return;
}
void traverse(PSTACK pS)
{
PNODE p = pS->pTop;
while(p != pS->pBottom)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
return;
}
bool empty(PSTACK pS)
{
if(pS->pTop == pS->pBottom)
{
return true;
}
else
{
return false;
}
}
bool pop(PSTACK pS, int * pVal)
{
if(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(empty(pS))
{
return;
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while(p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
}
}
分享到:
相关推荐
顺序栈(Sequential Stack)是一种使用数组实现的栈结构。它具有先进后出(Last In, First Out,LIFO)的特点,即最后入栈的元素首先出栈。 顺序栈中的元素按照入栈的顺序存储在数组中,并且通过一个指针来记录栈顶...
用c语言来实现计算器功能,涉及到数据结构中的栈,和很好的逻辑思维、
算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。...
数据结构的高级运用,主要是栈的运用!这个是清华大学数据结构书上的题,将算法改成了c函数,或许对你有点用!调试过的运用程序也在,其中有点小问题希望高人指点!
NULL 博文链接:https://linuxdev.iteye.com/blog/1148109
此次资源为清华大学计算机教程-数据结构(c语言版)第三章栈的全部算法实现,包括:数制转化、括号匹配、行编程程序、迷宫求解、表达式求职和汉诺塔问题求解6个算法,实现语言为JAVA,全部表明算法详细注解,希望对各位...
数据结构算法C语言代码实现集合 链表、单链表、双链表、循环链表、二叉树、二分查找、顺序表、队列、栈、图等各种算法的C语言代码实现 我遇到的最好的算法实现了,多亏了它!
用递归先序算法建立二叉树。要求通过键盘输入二叉树的先序遍历顺序从而建立一棵二叉树。利用栈实现一棵二叉树的中序非递归遍历。要求显示遍历次序。
利用栈的括号匹配算法 C语言数据结构 利用栈的括号匹配算法 C语言数据结构
用C语言的堆栈实现LRU算法,简单、易懂
C语言实现的各种算法,排序 哈希 查找 栈 队列等等~~~
栈的实现程序代码(c语言) 数据结构学习必备
用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)
表、栈和队列3.1 抽象数据类型(ADT)3.2 表ADT3.2.1 表的简单数组实现3.2.2 链表3.2.3 程序设计细节3.2.4 常见的错误3.2.5 双链表3.2.6 循环链表3.2.7 例子3.2.8 链表的游标实现3.3 栈ADT3.3.1 栈模型3.3.2 栈的...
用栈来实现汉诺塔,要明白递归就是栈的重要应用之一,递归是系统自动调用栈来处理。
本书的众多特色使得它在同类书中独树一帜:具体实现都采用正式的C语言代码而不是伪代码,在很多数据结构和算法的实现过程中,有大量细节问题是伪代码不能解决的;每一章都有精心组织的主题和应用;全部示例来自真实...
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 ...基于C语言实现的链表、栈、队列、排序算法以及二叉树源码(课程作业).zip
C语言的基础,数据结构的基础,清晰实现算法结构
N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt 万年历.txt 万年历的算法 .txt 乘方函数桃子猴.txt 乘法矩阵.txt 二分查找1.txt 二分查找2.txt 二叉排序树.txt 二叉树.txt ...
06-003习题课:栈的基本操作、KMP算法回顾 06-004二叉树的定义、性质与存储结构 06-005二叉树的前序、中序和后序遍历的递归与非递归算法 06-006统计二叉树中叶子结点个数、按给定的先序序列建立二叉链表 06-007线索...