数据结构之链式栈的一些基本操作
来源:互联网 发布:js数组去重方法 编辑:程序博客网 时间:2024/06/05 10:58
链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。
头文件 LinkStack.h
#ifndef __LINKSTACK_H__#define __LINKSTACK_H__#include "error.h"#define FALSE 0#define TRUE 1typedef int StackData;typedef struct _node{ StackData data; struct _node* next;}Node;typedef struct _linkStack{ Node* top;}LinkStack;// 创建栈LinkStack* Create_Stack ();// 判栈空否int StackEmpty (LinkStack* s);// 进栈int Push (LinkStack* s, StackData x);// 出栈int Pop (LinkStack* s, StackData *x);// 获取栈顶元素int GetTop (LinkStack* s, StackData *x);// 销毁表int Destroy (LinkStack* s);#endif // __LINKSTACK_H__
源文件 LinkStack.c
#include "LinkStack.h"#include <stdlib.h>// 创建栈LinkStack* Create_Stack (){ LinkStack* s = (LinkStack*) malloc(sizeof(LinkStack)/sizeof(char)); if (NULL == s) { errno = MALLOC_ERROR; return NULL; } // 置空栈 s->top = NULL; return s;}// 判栈空否int StackEmpty (LinkStack* s){ if (NULL == s) { errno = ERROR; return FALSE; } return s->top == NULL;}// 进栈int Push (LinkStack* s, StackData x){ if (NULL == s) { errno = ERROR; return FALSE; } // 新建结点 Node* node = (Node*) malloc(sizeof(Node)/sizeof(char)); if (NULL == node) { errno = MALLOC_ERROR; return FALSE; } node->data = x; node->next = s->top; s->top = node; return TRUE;}// 出栈int Pop (LinkStack* s, StackData *x){ if (NULL == s) { errno = ERROR; return FALSE; } if (StackEmpty(s)) { errno = EMPTY_STACK; return FALSE; } Node* p = s->top; *x = p->data; s->top = p->next; free(p); return TRUE;}// 获取栈顶元素int GetTop (LinkStack* s, StackData* x){ if (NULL == s) { errno = ERROR; return FALSE; } if (StackEmpty(s)) { errno = EMPTY_STACK; return FALSE; } *x = s->top->data; return TRUE;}// 销毁栈int Destroy (LinkStack* s) { if (NULL == s) { errno = ERROR; return FALSE; } int x; while (TRUE != StackEmpty(s)) { Pop (s, &x); } free(s); return TRUE;}
阅读全文
0 0
- 数据结构之链式栈的一些基本操作
- 数据结构笔记之链式栈的基本操作
- 数据结构之树的一些基本操作
- 数据结构 串(链式存储)的基本操作
- 【数据结构】链式队列的基本操作
- 【数据结构】 链式队列的一些操作
- 数据结构之顺序栈的一些基本操作
- 【数据结构】链式栈的操作
- 链式栈的基本操作
- 链式栈的基本操作
- 链式栈的基本操作
- 链式栈的基本操作
- 数据结构之链式队列的所有操作
- PHP数据结构之七_队列的链式存储和队列的基本操作
- 数据结构之顺序队列和链式队列常用的一些操作
- 栈之链式存储基本操作
- 数据结构之二叉树的一些基本操作
- 数据结构(二)链表1:链式存储的基本操作
- c++异常说明(exception specification)
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 11 编写简单的消息发布器和订阅器 (C++)
- NSCTF crypto50:
- CSS 中的内联元素、块级元素以及display的各个属性的特点
- java null与 “”空字符的区别
- 数据结构之链式栈的一些基本操作
- Oracle分页
- android 删除整个文件夹里面的文件
- 小程序更新了开发环境不再限制白名单
- linux下 awk内置变量使用介绍
- event loop到底做了什么
- 表达式和基本语句的规范
- 百练 6252:带通配符的字符串匹配
- Python机器学习算法——决策树