共享棧的基本操作-C語言
阿新 • • 發佈:2018-12-22
共享棧的基本操作
共享棧是用順序表實現, 在兩端分別設定為棧底, 並且分別初始化棧頂, 實現可以在兩端進行入棧和出棧操作, 並且互不干擾, 模擬分工成兩個棧, 當兩個棧頂索引重合時, 這代表該共享棧已滿.
具體實現
定義一個共享棧
//定義一個共享棧
typedef struct {
int stack[100];
int top[2];
}SqStack;
初始化
//對共享棧進行初始化
void InitStack(SqStack* S) {
S->top[0] = 0;
S->top[1] = 99;
}
壓棧操作
//壓棧操作
void Push(SqStack* S, int e, int flag) {
//判斷棧是否為滿
if (S->top[0] == S->top[1]) {
printf("棧滿\n");
return;
}
if (flag == 0) {
S->stack[S->top[0]] = e;
++S->top[0];
return;
} else if (flag == 1) {
S->stack[S->top[1]] = e;
--S->top[1];
return;
} else {
printf("輸入有誤\n" );
return;
}
}
出棧操作
//出棧操作
int Pop(SqStack* S, int flag) {
//判斷棧是否為空
if ((flag == 0 && S->top[flag] == 0)
|| (flag == 1 && S->top[flag] == 99)) {
printf("棧為空\n");
return 0;
}
if (flag == 0) {
--S->top[flag];
return S->stack[S->top[flag]];
} else if (flag == 1) {
++S->top[flag];
return S->stack[S->top[flag]];
} else {
printf("輸入有誤\n");
return 0;
}
}
測試
#include <stdio.h>
#include <windows.h>
//定義一個共享棧
typedef struct {
int stack[100];
int top[2];
}SqStack;
//對共享棧進行初始化
void InitStack(SqStack* S) {
S->top[0] = 0;
S->top[1] = 99;
}
//壓棧操作
void Push(SqStack* S, int e, int flag) {
//判斷棧是否為滿
if (S->top[0] == S->top[1]) {
printf("棧滿\n");
return;
}
if (flag == 0) {
S->stack[S->top[0]] = e;
++S->top[0];
return;
} else if (flag == 1) {
S->stack[S->top[1]] = e;
--S->top[1];
return;
} else {
printf("輸入有誤\n");
return;
}
}
//出棧操作
int Pop(SqStack* S, int flag) {
//判斷棧是否為空
if ((flag == 0 && S->top[flag] == 0)
|| (flag == 1 && S->top[flag] == 99)) {
printf("棧為空\n");
return 0;
}
if (flag == 0) {
--S->top[flag];
return S->stack[S->top[flag]];
} else if (flag == 1) {
++S->top[flag];
return S->stack[S->top[flag]];
} else {
printf("輸入有誤\n");
return 0;
}
}
int main() {
SqStack s1;
InitStack(&s1);
for (int i = 0; i < 3; ++i) {
Push(&s1, i + 1, 0);
Push(&s1, 10 - i, 1);
}
for (int i = 0; i < 3; ++i) {
printf("%d ", Pop(&s1, 0));
}
printf("\n");
for (int i = 0; i < 3; ++i) {
printf("%d ", Pop(&s1, 1));
}
printf("\n");
system("pause");
return 0;
}
效果圖
希望該文章對大家有所幫助
同時真誠接受大家寶貴的評論的建議