stackADT
stack.h
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include <stdbool.h> typedef struct stack STACK; STACK* createStack (void);
bool pushStack (STACK* stack, void* dataInPtr);
void* popStack (STACK* stack);
bool emptyStack(STACK* stack);
bool fullStack(STACK* stack);
STACK* destroyStack (STACK* stack);
void* stackTop(STACK* stack);
#endif // STACK_H_INCLUDED
stack.c
#include "stack.h"
#include <stdlib.h> typedef struct node
{
void* dataPtr;
struct node* link;
} STACK_NODE; struct stack
{
int count;
STACK_NODE* top;
}; STACK* createStack(void)
{
STACK* stack; stack = (STACK*) malloc(sizeof(STACK));
if (stack)
{
stack->count = ;
stack->top = NULL;
}
return stack;
} bool pushStack(STACK* stack, void* dataInPtr)
{
STACK_NODE* newPtr; newPtr = (STACK_NODE* ) malloc(sizeof(STACK_NODE));
if(!newPtr)
return false;
newPtr->dataPtr = dataInPtr; newPtr->link = stack->top;
stack->top = newPtr; (stack->count)++;
return true;
} void* popStack (STACK* stack)
{
void* dataOutPtr;
STACK_NODE* temp; if (stack->count == )
dataOutPtr = NULL;
else {
temp = stack->top;
dataOutPtr = stack->top->dataPtr;
stack->top = stack->top->link;
free(temp);
(stack->count)--;
}
return dataOutPtr;
} bool emptyStack(STACK* stack)
{
return (stack->count == );
} bool fullStack(STACK* stack)
{
STACK_NODE* temp;
if((temp = (STACK_NODE*)malloc(sizeof(*(stack->top)))))
{
free (temp);
return false;
}
return true;
} STACK* destroyStack (STACK* stack)
{
STACK_NODE* temp;
if(stack) {
while(stack->top != NULL){
free (stack->top->dataPtr); temp = stack->top;
stack->top = stack->top->link;
free(temp);
}
free(stack);
}
return NULL;
} void* stackTop(STACK* stack)
{
if(stack->count == )
return NULL;
else
return stack->top->dataPtr;
}
stackADT的更多相关文章
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 20172306 2018-2019-2 《Java程序设计与数据结构》第九周学习总结
20172306 2018-2019-2 <Java程序设计与数据结构>第九周学习总结 教材学习内容总结 无向图 图是由结点和这些结点之间的连接构成 就图来说,结点叫做顶点,结点之间的连接 ...
- 20172302 《Java软件结构与数据结构》第二周学习总结
2018年学习总结博客总目录:第一周 第二周 教材学习内容总结 第三章 集合概述-栈 3.1 集合 (1) 集合是一种聚集,组织了其他对象的对象.它定义一张破那个特定的方式,可以访问.管理所包含的对象 ...
- 20172325 2018-2019-1 《Java程序设计》第二周学习总结
20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...
- Java求解迷宫问题:栈与回溯算法
摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1) 选择一个 ...
- 20162314 《Program Design & Data Structures》Learning Summary Of The Fifth Week
20162314 2017-2018-1 <Program Design & Data Structures>Learning Summary Of The Fifth Week ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- Android演示Stack(课下作业)
Demand 之前活动中误传成别的截图,故在此补充博客 1.使用自己实现的栈构建Android程序,提供用于栈的一个puh按钮和pop按钮,在文本域接收一个字符串作为push的输入,文本区将显示每个操 ...
随机推荐
- Customized Mini LED Keychain For Better Brand Identity
Looking for products that tell people the brand name? Then you'll find an affordable product that wi ...
- DOM的方法和属性
HTML DOM 方法是我们可以在节点(HTML 元素)上执行的动作. HTML DOM 属性是我们可以在节点(HTML 元素)设置和修改的值. 编程接口 可通过 JavaScript (以及其他编程 ...
- java &&和&与逻辑运算区别
二者都表示与运算,同真为真,遇假即假 && 具有短路功能,前面为false后面不在预算直接表达式为false; &还可以用作位运算符,当&操作符两边的表达式不是 boo ...
- codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)
题目链接:http://codeforces.com/problemset/problem/1204/C 给定一组序列,P1,P2,P3...Pm,这是一组合法路径的序列,即任意的Pi和Pi+1之间有 ...
- win10图标变白的解决办法(亲测有用)
1.首先,随便打开一个文件夹点击[查看]菜单,然后勾选[隐藏的项目]: 2.同时按下快捷键[Win]+[R],在打开的[运行]窗口中输入%localappdata%: 3.在打开的文件夹中,找到[Ic ...
- java.sql.SQLException: Access denied for user 'gaoqi'@'127.0.0.1' (using password: YES)
GRANT ALL PRIVILEGES ON *.* TO root @'%' IDENTIFIED BY "mypassword";--%表示所有的IP都能访问,也可以修改为专 ...
- Bugku-CTF分析篇-这么多数据包(这么多数据包找找吧,先找到getshell的流)
这么多数据包 这么多数据包找找吧,先找到getshell的流
- 联合查询:union
1.联合查询:union 1.1 作用:将多条select语句的结果,合并到一起,称之为联合操作. 1.2 语法:( ) union ( ); 例子:(select name from info_or ...
- CRPR/CPPR
S CRPR clock reconvergence pessimism removal C CPPR clock path pessimism removal 剔除公共clock path上的悲 ...
- AI人工智能之基于OpenCV+face_recognition实现人脸识别
因近期公司项目需求,需要从监控视频里识别出人脸信息.OpenCV非常庞大,其中官方提供的人脸模型分类器也可以满足基本的人脸识别,当然我们也可以训练自己的人脸模型数据,但是从精确度和专业程度上讲Open ...