#include <stdio.h> #include <stdlib.h>

#define SElemType int

typedef struct { int top[2], bot[2]; SElemType *V; int m; } DblStack;

// 双栈初始化 void InitDblStack(DblStack *S, int m) { S->top[0] = -1; S->bot[0] = 0; S->top[1] = m; S->bot[1] = m - 1; S->m = m; S->V = (SElemType *)malloc(m * sizeof(SElemType)); }

// 判断栈空 int IsDblStackEmpty(DblStack *S, int i) { if (i == 0) return S->top[0] == -1; else return S->top[1] == S->m; }

// 判断栈满 int IsDblStackFull(DblStack *S) { return S->top[0] + 1 == S->top[1]; }

// 进栈 int PushDblStack(DblStack *S, int i, SElemType x) { if (IsDblStackFull(S)) return 0; // 栈满,插入失败 if (i == 0) { S->V[++S->top[0]] = x; } else { S->V[--S->top[1]] = x; } return 1; // 插入成功 }

// 出栈 int PopDblStack(DblStack *S, int i, SElemType *x) { if (IsDblStackEmpty(S, i)) return 0; // 栈空,删除失败 if (i == 0) { *x = S->V[S->top[0]--]; } else { *x = S->V[S->top[1]++]; } return 1; // 删除成功 }

int main() { DblStack S; InitDblStack(&S, 10); int i; SElemType x; for (i = 0; i < 5; i++) { PushDblStack(&S, 0, i); PushDblStack(&S, 1, i + 5); } while (!IsDblStackEmpty(&S, 0)) { PopDblStack(&S, 0, &x); printf("%d ", x); } printf("\n"); while (!IsDblStackEmpty(&S, 1)) { PopDblStack(&S, 1, &x); printf("%d ", x); } printf("\n"); return 0;

将编号为0和1的两个栈存放于一个数组空间Vm中栈底分别处于数组的两端。当第0号栈的栈顶指针top0等于-1时该栈为空当第1号栈的栈顶指针top1等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化判断栈空、栈满、进栈和出栈等算法的函数。双栈数据结构的定义如下:typedef structint top2bot2; 栈顶和栈底指针 SElemType V;

原文地址: https://www.cveoy.top/t/topic/cjzA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录