栈的模拟
来源:互联网 发布:优酷下载器 mac 编辑:程序博客网 时间:2024/06/15 11:56
栈的特点是“先进后出”。模拟的思路是:建立一个栈的结构体,里面有两个指针(PNODE ptop,PNODE pbutton),分别指向栈的最后一个进入的结点、第一个结点前的一个结点。程序如下图:
/*程序功能:用链表模拟栈
对栈进行 初始化、压栈、判断空、遍历、出栈、清空操作
*/
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *pnext;
} NODE,*PNODE;
typedef struct Stack
{
PNODE ptop;
PNODE pbutton;
} STACK, * PSTACK;
void initstack(PSTACK pstack);
bool push(PSTACK pstack,int val);
bool empty(PSTACK pstack);
bool travel(PSTACK pstack);
bool pop(PSTACK pstack,int *val);
void clear(PSTACK pstack);
int main()
{
int val;
STACK s;
initstack(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
//printf("ptop地址%d,pbutton地址%d",s.ptop,s.pbutton);
travel(&s);
pop(&s,&val);
printf("删除的结点的值为%d\n",val);
travel(&s);
clear(&s);
travel(&s);
return 0;
}
//初始化栈
void initstack(PSTACK pstack)
{
pstack->ptop=(PNODE)malloc(sizeof(NODE));
if(pstack->ptop==NULL)
{printf("初始化失败\n");
}
else
{
pstack->pbutton=pstack->ptop;
pstack->ptop->pnext=NULL; //pstack->pbutton->pnext=NULL也可以;
}
}
//压栈
bool push(PSTACK pstack,int val)
{
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
pnew->pnext=pstack->ptop;
pstack->ptop=pnew;
//printf("%d\n",pnew->data);
return true;
}
//判断栈是否为空
bool empty(PSTACK pstack)
{
if(pstack->ptop==pstack->pbutton)
{
printf("栈是空的\n");
return true;
}
else return false;
}
//遍历栈
bool travel(PSTACK pstack)
{
if(empty(pstack))
return false;
else
{
PNODE r=pstack->ptop;
printf("栈里面的值为: ");
while(r!=pstack->pbutton)
{
printf("%d ",r->data);
r=r->pnext;
}
printf("\n");
return true;
}
}
//出栈
bool pop(PSTACK pstack,int *val)
{
if(empty(pstack))
return false;
else
{
PNODE q=pstack->ptop;
*val=q->data;
pstack->ptop=q->pnext;
q=NULL;//将指针内容清空
return true;
}
}
//清空栈
void clear(PSTACK pstack)
{
if(empty(pstack))
return;
else
{
PNODE k=pstack->ptop;
PNODE q=NULL;
while(k!=pstack->pbutton)
{ q=k->pnext;
free(k);
k=q;
}
pstack->ptop=pstack->pbutton;
}
}
- 递归的栈模拟
- 【数据结构】 栈的模拟
- 栈的模拟
- 栈的模拟实现
- 栈的模拟实现
- LinkList模拟栈的操作以及模拟队列的操作
- 栈的模拟与评析
- 全局变量模拟栈的操作
- 3.4-汉诺塔的栈模拟
- Java栈的模拟实现
- 栈的使用和模拟
- POJ-----1363栈的模拟
- 栈模拟式子的计算
- js模拟栈的操作
- 简单的栈操作的模拟,入栈出栈
- 【栈】数组模拟栈的操作
- HDU 1022 栈 栈的模拟
- 图形界面模拟一个顺序栈的实现
- JavaScript绑定事件的方法[3种]
- 【Java|Android】时间日期工具
- Javascript函数和事件
- [Unity3D学习]Unity代码热更新 源码下载
- Android自定义组合型控件
- 栈的模拟
- 01_Java 数据结构
- csdn第一步 github网站注册
- 这个关于c中break的跳转位置以及声明变量的作用域的问题。
- iOS微信图片浏览模仿
- UI基础-初级数据持久化
- 《Android源码设计模式解析与实战》读书笔记(一)
- swift学习日记(二) 字符串 集合类型 控制流
- 【Android】SD卡工具类