C_数据结构_栈
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h> typedef struct Node //建造节点
{
int data;
struct Node * pNext;
}NODE, * PNODE; typedef struct Stack //建造栈所需要的两个参数
{
PNODE pTop; //指向栈顶的元素
PNODE pBottom; //指向栈底没有实际含义的元素
}STACK, * PSTACK;// PSTACK 等价于 struct Stack * void init(PSTACK); //初始化
void push(PSTACK, int); //压栈
void traverse(PSTACK); //遍历输出
bool pop(PSTACK, int *); //出栈
void clear1(PSTACK); //清空
void clear2(PSTACK);//清空 int main(void)
{
STACK S; //STACK 等价于 struct Stack
int val; init(&S); //初始化 目的是造出一个空栈
push(&S, ); //压栈
push(&S, );
push(&S, );
push(&S, );
push(&S, );
push(&S, );
traverse(&S); //遍历输出 if ( pop(&S, &val) ) //出栈
{
printf("出栈成功!出栈的元素是:%d\n", val);
}
else
{
printf("出栈失败!\n");
} traverse(&S); //遍历输出 clear2(&S);
traverse(&S); //遍历输出 return ;
} void init(PSTACK pS) //初始化
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
printf("动态内存分配失败!\n");
exit(-);
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL; //pS->pBottom->pNext = NULL;
}
} void push(PSTACK pS, int val) //压栈
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop; //不能把 pS->Top 改为 pS->pBottom
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;
}
} //把PS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败返回false,否则返回true
bool pop(PSTACK pS, int * pVal)
{
if ( empty(pS) ) // pS 形参本身保存的是 S 的地址,这里需要将S的地址发送给 empty() 函数只要发送 pS即可
{
return false;
}
else
{
PNODE r = pS->pTop; //需要把他定义成已 pS->pTop 为类型的地址变量
*pVal = pS->pTop->data; //等价于 r->data
pS->pTop = pS->pTop->pNext; //等价于 r->pNext
free(r); //这里释放的是r所指向的动态内存
r = NULL; //这里表示清空地址变量 r 的数据以便下次分配 return true;
}
} void clear2(PSTACK pS) //清空
{
PNODE p;
int i;
printf("清空的值都有:"); while ( pS->pTop != pS->pBottom )
{
p = pS->pTop;
i = p->data;
printf("%d ", i);
pS->pTop = p->pNext;
free(p);
p = NULL;
}
printf("\n"); i = NULL;
pS->pTop = pS->pBottom;
} void clear1(PSTACK pS) //清空
{
if ( empty(pS) )
{
return;
}
else
{
PNODE p = pS->pTop;
PNODE q = p->pNext; while (p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
} }
C_数据结构_栈的更多相关文章
- c_数据结构_栈的实现
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_1_数据结构_栈
2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类 的.好用吗?好用,这就是数据结构的用处,只不过你在不知不 ...
- C#数据结构_栈和队列
栈:先进后出,只能在栈顶进行操作. 栈的操作主要包括在栈顶插入元素和删除元素.取栈顶元素和判断栈是否为空等. 栈的接口定义: public interface IStack<T> { in ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_队的实现
# 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
- C_数据结构_走迷宫
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...
随机推荐
- Vim命令图解及快捷键讲解
快捷键详解
- JQuery实现1024小游戏
最近用Jqery写了一个1024小游戏,由于是第一次写小游戏,所以就选了一个基础的没什么难度游戏.具体实现如下: 首先在开发时将整个游戏分成两层(自认为),底层是游戏的数据结构以及对数据的操作,上层是 ...
- Matplotlib:可视化颜色命名分类和映射颜色分类
Matplotlib中支持的所有颜色分类 映射颜色分类
- 真机测试以及appstore发布流程
一.添加真机测试流程:http://jingyan.baidu.com/article/48b558e33b96a27f38c09aa4.html 二.app发布流程:http://jingyan.b ...
- postMessage 实现跨源通信 iframe 跨域获取url
用postMessage实现跨源通信的方法实例 如:在www.bbb.com/index.html页面获取www.aaa.com/index.html的数据,以iframe的形式 www.aaa.co ...
- Android逆向分析(2) APK的打包与安装
http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...
- MySQL性能分析工具之PROFILE
Mysql Profile 如何开启Profiles功能以及如何简单使用: https://www.cnblogs.com/zengkefu/p/6519010.html MySQL profiles ...
- HDU - 5078 水题
题意:最大困难=距离 / 相邻时间 #include<cstring> #include<cstdio> #include<cmath> #define ll do ...
- Python基础(8)——常见模块
模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser has ...
- Spring对JSON请求加解密
Spring中处理JSON请求通常使用@RequestBody和@ResponseBody注解,针对JSON请求加解密和过滤字符串,Spring提供了RequestBodyAdvice和Respons ...