数据结构顺序栈
来源:互联网 发布:网络推广平均工资 编辑:程序博客网 时间:2024/06/10 01:06
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
顺序栈:
#ifndef __SQSTACK_H__#define __SQSTACK_H__#include "error.h"#define TRUE 1#define FALSE 0#define SIZE 10typedef int StackData; typedef struct _stack{StackData data[SIZE]; // 栈数组int top; // 栈顶元素下标}Stack;// 置空栈int InitStack (Stack *S); // 判栈是否空栈int StackEmpty (Stack *S);// 判栈是否栈满int StackFull (Stack *S); // 进栈int Push (Stack *S, StackData x);// 出栈int Pop (Stack *S, StackData *x); // 取栈顶int GetTop (Stack *S, StackData *x); /* //对象:由数据类型为StackData的元素构成 int Push (stack *S, StackData x);//进栈 int Pop (stack *S, StackData &x); //出栈 int GetTop (stack *S, StackData &x); //取栈顶 void InitStack (stack *S); //置空栈 int StackEmpty (stack *S); //判栈空否 int StackFull (stack *S); //判栈满否*/#endif // __SQSTACK_H__
#include "SqStack.h"int InitStack (Stack *S){if (S == NULL){errno = ERROR;return FALSE;}S->top = -1; }// 空返回真,否则返回假int StackEmpty (Stack *S){if (S == NULL){errno = ERROR;return FALSE;}return S->top == -1;}// 满返回真,否则返回假int StackFull (Stack *s){if (s == NULL){errno = ERROR;return FALSE;}return s->top == (SIZE-1);}int Push (Stack *s, StackData x){if (s == NULL){errno = ERROR;return FALSE;}// 判断是否满栈if (StackFull(s)){errno = FULL_STACK;return FALSE;}/*s->data[top+1] = x;s->top++;*/s->data[++s->top] = x;return TRUE;}int Pop (Stack *s, StackData *x){if (s == NULL){errno = ERROR;return FALSE;}// 判断是否空栈if (StackEmpty(s)){errno = EMPTY_STACK;return FALSE;}/**x = s->data[s->top];s->top--;*/*x = s->data[s->top--];return TRUE;}int GetTop (Stack *s, StackData *x){if (s == NULL){errno = ERROR;return FALSE;}// 判断是否空栈if (StackEmpty(s)){errno = EMPTY_STACK;return FALSE;}*x = s->data[s->top];return TRUE;}
#include <stdio.h>#include "SqStack.h"int main(){Stack s;if (InitStack(&s) == FALSE){printf ("初始化失败\n");printf ("错误号:%d\n", errno);myError("InitStack");char * str = myStrError(errno);printf ("str: %s\n", str);}if (StackEmpty(&s)){printf ("空栈\n");}if (StackFull(&s)){printf ("满栈\n");}int x;if (Pop(&s, &x) != TRUE){myError ("Pop 错误");}int i;for (i = 0; i < 10; i++){Push(&s, i);}if (Push(&s, 100) != TRUE){myError("压入第11个元素");}char str[100];for (i = 0; i < 12; i++){if (Pop (&s, &x) != TRUE){sprintf (str, "Pop第%d个元素", i);myError (str);}printf ("x : %d\n", x);}return 0;}
阅读全文
0 0
- 数据结构(栈):顺序栈
- 数据结构之顺序栈
- 数据结构 顺序栈
- 数据结构,栈,顺序表示
- 【数据结构】顺序栈 Stack
- 数据结构《顺序栈》
- 数据结构----顺序栈
- 数据结构之顺序栈
- 数据结构-顺序栈
- 【数据结构】顺序栈_Stack
- 数据结构之顺序栈
- 【数据结构】·【顺序栈】
- 数据结构_顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 数据结构之顺序栈
- 【CodeForces617E】XOR and Favorite Number
- MySQL基础
- 自我实现itoa(整形转字符串)
- Linux学习之基础篇_2017.8.4
- Ceres(3)---Interfacing with Automatic Differentiation
- 数据结构顺序栈
- JavaScript--引用数据类型--objiect
- 从一个字符数组中读出相应的整数、实数
- Protobuf数据格式解析
- 2017 Multi-University Training Contest
- 手写高并发网络请求框架
- /usr/bin/ld: cannot find -lcblas
- 将字符串首字母大写
- iOS-触发home键和电源键