// 定义双向栈数据结构 typedef struct { int top[2]; // 两个栈的栈顶指针 int maxsize; // 栈的最大长度 int *data; // 栈的存储空间 } DoubleStack; // 初始化双向栈 void InitStack(DoubleStack *S, int maxsize) { S->maxsize = maxsize; S->data = (int *) malloc(maxsize * sizeof(int)); S->top[0] = -1; // 初始化第一个栈的栈顶指针 S->top[1] = maxsize; // 初始化第二个栈的栈顶指针 } // 入栈操作 void Push(DoubleStack *S, int i, int x) { if (S->top[1] - S->top[0] == 1) { printf("Stack overflow!\n"); // 栈满,无法入栈 return; } if (i == 0) { // 对第一个栈进行操作 S->top[0]++; S->data[S->top[0]] = x; } else if (i == 1) { // 对第二个栈进行操作 S->top[1]--; S->data[S->top[1]] = x; } else { printf("Invalid stack index!\n"); // 栈号错误 } } // 出栈操作 void Pop(DoubleStack *S, int i, int *x) { if (i == 0) { // 对第一个栈进行操作 if (S->top[0] == -1) { printf("Stack underflow!\n"); // 栈空,无法出栈 return; } *x = S->data[S->top[0]]; S->top[0]--; } else if (i == 1) { // 对第二个栈进行操作 if (S->top[1] == S->maxsize) { printf("Stack underflow!\n"); // 栈空,无法出栈 return; } *x = S->data[S->top[1]]; S->top[1]++; } else { printf("Invalid stack index!\n"); // 栈号错误 } }
时间: 2023-05-19 13:06:31 浏览: 102
3.C-数据结构-栈源码
这段代码实现了一个双向栈数据结构,其中包括初始化双向栈、入栈操作和出栈操作。双向栈是两个栈共享一个数组空间,可以从两端进行入栈和出栈操作。
在初始化双向栈时,需要指定最大长度,并分别初始化两个栈的栈顶指针。在入栈操作时,需要指定是对哪个栈进行操作,如果栈满则无法入栈。在出栈操作时,同样需要指定是对哪个栈进行操作,如果栈空则无法出栈。
这段代码可以用于实现一些需要同时维护两个栈的算法,比如表达式求值、括号匹配等。
阅读全文