-
栈
// 3.1.1 栈的基本概念 // 1. 栈的定义:栈是只允许在一端进行插入或删除操作的线性表 // 栈的操作特性:后进先出(Last In First Out, LIFO) // 2. 栈的基本操作 // InitStack(&S); // StackEmpty(S); // Push(&S, x); // Pop(&S, &x); // GetTop(S, &x); // DestroyStack(&S) // 3.1.2 栈的顺序存储结构 // 1. 顺序栈的实现 // 栈的顺序存储类型 // #define MaxSize 50 // typedef struct { // ElemType data[MaxSize]; // int top; // }SqStack; // 2. 顺序栈的基本运算 // 3. 共享栈:利用栈底位置相对不变的特性,让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸 // 3.1.3 栈的链式存储结构 // 栈的链式存储类型: // typedef struct Linknode { // Elemtype data; // struct Linknode *next; // } *LiStack; -
C/C++实现顺序栈的基本操作(源码)
#include<stdio.h> #include<stdlib.h> #define MaxSize 10 typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int top; }SqStack, *PSqStack; // 初始化 void InitStack(PSqStack &S) { S = (PSqStack)malloc(sizeof(SqStack)); S->top = -1; } // 判空 bool StackEmpty(PSqStack S) { if (!S) { printf("栈不存在 \n"); return false; } if(S->top == -1) { printf("栈空 \n"); return true; } else { printf("栈非空 \n"); return false; } } // 进栈 void Push(PSqStack &S, ElemType x) { if (S->top == MaxSize - 1) { printf("栈满,无法进栈 \n"); return; } S->data[++S->top] = x; } // 出栈 ElemType Pop(PSqStack &S) { if (S->top == -1) { printf("栈空,无法出栈 \n"); return false; } return S->data[S->top--]; } // 读栈顶元素 ElemType GetTop(PSqStack S) { if (S->top == -1) { printf("栈空,无栈顶元素 \n"); return false; } return S->data[S->top]; } // 销毁 void DestroyStack(PSqStack &S) { free(S); S = NULL; } // 现有栈的出栈顺序 void StackOrder(PSqStack S) { int len = S->top, i; for (i = len; i >= 0; i--) { printf("%d \n", S->data[i]); } } int main() { PSqStack S; ElemType x; printf("------------------初始化------------------ \n"); InitStack(S); printf("------------------判空-------------------- \n"); StackEmpty(S); printf("------------------进栈-------------------- \n"); printf("请输入进栈元素: "); scanf("%d", &x); Push(S, x); printf("------------------判空-------------------- \n"); StackEmpty(S); printf("------------------现有栈的出栈顺序---------- \n"); StackOrder(S); printf("------------------进栈-------------------- \n"); printf("请输入进栈元素: "); scanf("%d", &x); Push(S, x); printf("------------------现有栈的出栈顺序---------- \n"); StackOrder(S); printf("------------------读栈顶元素---------------- \n"); x = GetTop(S); printf("当前栈顶元素: %d \n", x); printf("------------------出栈-------------------- \n"); Pop(S); printf("------------------现有栈的出栈顺序----------- \n"); StackOrder(S); printf("------------------销毁-------------------- \n"); DestroyStack(S); printf("------------------判空-------------------- \n"); StackEmpty(S); printf("------------------初始化------------------ \n"); InitStack(S); printf("------------------判空-------------------- \n"); StackEmpty(S); return 0; }