创建动态栈
来源:互联网 发布:淘宝耐克旗舰店双十一 编辑:程序博客网 时间:2024/05/21 11:36
/*
2017年6月16日 15:33:30
数据结构(c)
创建动态栈
初始化栈 压栈 出栈 遍历
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
2017年6月16日 15:33:30
数据结构(c)
创建动态栈
初始化栈 压栈 出栈 遍历
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* pNext ;
}NODE, *PNODE;
{
int data;
struct node* pNext ;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop, pBottom;
{
PNODE pTop, pBottom;
}STACK, * PSTACK;
void init (PSTACK);//初始化栈
bool push (PSTACK pS, int t);//压栈
int pop (PSTACK pS);//出栈
void traverse(PSTACK pS);//遍历
void clear(PSTACK pS);//清空
bool is_empty(PSTACK pS);//是否为空
bool push (PSTACK pS, int t);//压栈
int pop (PSTACK pS);//出栈
void traverse(PSTACK pS);//遍历
void clear(PSTACK pS);//清空
bool is_empty(PSTACK pS);//是否为空
int main (void)
{
STACK s;
init (&s);//初始化栈
printf("\n初始化栈成功\n");
printf("\n初始化栈成功\n");
push (&s, 4);//压栈
push (&s, 7);//压栈
push (&s, 2);//压栈
push (&s, 0);//压栈
push (&s, 6);//压栈
push (&s, 7);//压栈
printf("\n压栈成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
push (&s, 7);//压栈
push (&s, 2);//压栈
push (&s, 0);//压栈
push (&s, 6);//压栈
push (&s, 7);//压栈
printf("\n压栈成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
clear(&s);//清空
traverse(&s);//遍历
printf("\n遍历成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
push (&s, 8);//压栈
push (&s, 7);//压栈
push (&s, 5);//压栈
push (&s, 4);//压栈
push (&s, 0);//压栈
push (&s, -1);//压栈
printf("\n压栈成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
push (&s, 7);//压栈
push (&s, 5);//压栈
push (&s, 4);//压栈
push (&s, 0);//压栈
push (&s, -1);//压栈
printf("\n压栈成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
pop (&s);//出栈
traverse(&s);//遍历
printf("\n遍历成功\n");
return 0;
}
void init (PSTACK pS)//初始化栈
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败,程序崩溃\n");
exit (-1);
}
pNew->pNext = NULL;
pS->pBottom = pNew;
pS->pTop = pNew;
return;
}
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败,程序崩溃\n");
exit (-1);
}
pNew->pNext = NULL;
pS->pBottom = pNew;
pS->pTop = pNew;
return;
}
bool push (PSTACK pS, int t)//压栈
{
PNODE q;
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败,程序崩溃\n");
return false;
exit (-1);
}
pNew->data = t;
q = pS->pTop;
pS->pTop = pNew;
pNew->pNext = q;
return true;
}
{
PNODE q;
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败,程序崩溃\n");
return false;
exit (-1);
}
pNew->data = t;
q = pS->pTop;
pS->pTop = pNew;
pNew->pNext = q;
return true;
}
bool is_empty(PSTACK pS)//是否为空
{
if (pS->pBottom == pS->pTop )
return true;
else
return false;
}
{
if (pS->pBottom == pS->pTop )
return true;
else
return false;
}
void traverse(PSTACK pS)//遍历
{
PNODE t = pS->pTop;
while (pS->pBottom != t)
{
printf("%d ",t->data);
t = t ->pNext ;
}
printf("\n");
}
int pop (PSTACK pS)//出栈
{
int m = pS->pTop->data;
PNODE t = pS->pTop ;
pS->pTop = pS->pTop->pNext ;
free(t);
t = NULL;
return m;
}
{
int m = pS->pTop->data;
PNODE t = pS->pTop ;
pS->pTop = pS->pTop->pNext ;
free(t);
t = NULL;
return m;
}
void clear(PSTACK pS)//清空
{
if (is_empty(pS))
return;
else
{
PNODE p, q;
p = pS->pTop ;
q = NULL ;
while (p != pS->pBottom )//释放内存
{
q = p->pNext ;
free(p);
p = q;
}
pS->pTop = pS->pBottom ;
return;
}
}
{
if (is_empty(pS))
return;
else
{
PNODE p, q;
p = pS->pTop ;
q = NULL ;
while (p != pS->pBottom )//释放内存
{
q = p->pNext ;
free(p);
p = q;
}
pS->pTop = pS->pBottom ;
return;
}
}
阅读全文
0 0
- 创建动态栈
- 动态栈的创建
- 动态创建
- js动态创建li-动态创建td
- 动态创建按钮
- Delphi动态创建树
- 动态创建Tree
- 如何动态创建菜单
- 动态创建recordset
- 创建动态链接库
- 动态创建控件
- 动态创建用户界面
- 动态创建程序集
- TChart动态创建(Delphi)
- 动态创建数据窗口
- 创建动态控件
- 动态创建控件:
- Panel创建动态控件
- @synchronized 互斥锁
- java知识点
- react native 与原生之间的交互
- XGBoost参数调优完全指南(附Python代码)
- 用64位 EXE4J 生成EXE执行文件出错问题!!
- 创建动态栈
- ENDNOTE使用方法
- 关于EditText的一个Bug
- 原生js和jquery两种方式实现tab切换
- 端口
- Collection 集合的遍历
- 视频相关的协议
- 手把手搭建企业级服务--3.搭建MySQL-开放3306端口
- ffplay视频播放器原理