用c代码实现简单的出栈和压栈
来源:互联网 发布:卖房软件 编辑:程序博客网 时间:2024/05/17 22:01
栈其实就是一种实现“先进后出”的一种存储结构。
用动态链表的方式实现出栈和压栈:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdlib.h>
//节点的结构
typedef struct Node
{
int date;
struct Node *pNext;
}NODE, *PNODE;
{
int date;
struct Node *pNext;
}NODE, *PNODE;
//栈顶和栈底的指针
struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
//先建造一个空的节点,让栈底和站顶相等,建造空的节点易于操作栈。
void initStack(PSTACK pS)
{
PNODE S = (PNODE)malloc(sizeof(NODE));
if(S == NULL)
{
printf("S malloc failed\n");
exit(-1);
}
pS->pTop = S;
pS->pBottom = S;
S->pNext = NULL;
}
{
PNODE S = (PNODE)malloc(sizeof(NODE));
if(S == NULL)
{
printf("S malloc failed\n");
exit(-1);
}
pS->pTop = S;
pS->pBottom = S;
S->pNext = NULL;
}
void pushStack(PSTACK pS, int date)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("pNew malloc failed\n");
exit(-1);
}
pNew->date = date;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("pNew malloc failed\n");
exit(-1);
}
pNew->date = date;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
}
void traverseStack(PSTACK pS)
{
PNODE P;
P = pS->pTOP;
while(p != pS->pBottom)
{
printf("%d ",p->date);
p = p->pNext;
}
printf("\n");
return;
}
bool popStack(PSTACK pS, int *pVal)
{
if(pS->pTop == pS->pBottom)
{
printf("stack is emply\n");
return false;
}
PNODE r;
r = pS->pTop;
*pVal = r->date;
pS->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
{
PNODE P;
P = pS->pTOP;
while(p != pS->pBottom)
{
printf("%d ",p->date);
p = p->pNext;
}
printf("\n");
return;
}
bool popStack(PSTACK pS, int *pVal)
{
if(pS->pTop == pS->pBottom)
{
printf("stack is emply\n");
return false;
}
PNODE r;
r = pS->pTop;
*pVal = r->date;
pS->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
void clear(PSTACK pS)
{
if(pS->pTop == pS->pBottom)
{
printf("栈为空\n");
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while(p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
}
}
{
if(pS->pTop == pS->pBottom)
{
printf("栈为空\n");
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while(p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
}
}
int main(void)
{
STACK S; //STACK 等价于 struct Stack
int val;
bool ret;
initStack(&S); //目的是建造一个空栈
pushStack(&S, 1); //压栈
ret = popStack(&S, &val); //出栈元素
if(ret == false)
{
printf("栈为空\n");
}
else
{
printf("出栈元素是 %d \n", val);
}
traverseStack(&S); //遍历栈
clear(&pS); //清空栈
{
STACK S; //STACK 等价于 struct Stack
int val;
bool ret;
initStack(&S); //目的是建造一个空栈
pushStack(&S, 1); //压栈
ret = popStack(&S, &val); //出栈元素
if(ret == false)
{
printf("栈为空\n");
}
else
{
printf("出栈元素是 %d \n", val);
}
traverseStack(&S); //遍历栈
clear(&pS); //清空栈
}
阅读全文
0 0
- 用c代码实现简单的出栈和压栈
- 简单的C语言栈的实现代码
- 堆栈顺序实现入栈和出栈等(C)
- 实现简单的队和栈结构,附代码,图
- 链表实现队列的出队和入队,栈的入栈和出栈
- 栈和队列简单代码实现
- C 实现简单的栈
- 栈的c代码实现
- 栈的入栈和出栈操作的实现
- 用C语言实现一个简单的计算器代码
- 简单的C语言赫夫曼树实现代码
- 顺序栈的C语言实现——初始化函数、入栈函数和出栈函数
- c语言 出栈和进栈
- 用类模拟栈的出栈和压栈
- 堆栈用链表实现压栈和出栈
- 用memcache实现简单的先进先出队列
- 链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作
- 用两个栈实现队列的入队和出对操作
- 经常听说AT&T汇编、Intel汇编,还能听到ARM汇编,这个ARM汇编与前两个有什么关联?
- Struts2的页面参数获取
- centOS7 网络配置,IP设置,连网配置
- Git的核心概念
- jackson-dataformat-xml XXE漏洞(CVE-2016-3720)
- 用c代码实现简单的出栈和压栈
- [转]深度学习中的正则化
- 浅析c#中登录窗体和欢迎窗体关闭的问题
- 浅谈GC垃圾回收器
- STM32->UART
- C++关键字final与override
- 霍曼转移轨道仿真(平面内和平面外)
- 用链表实现杭电1276士兵队列训练问题
- 算法导论:堆排序