1. 程式人生 > >共享棧的基本操作-C語言

共享棧的基本操作-C語言

共享棧的基本操作

共享棧是用順序表實現, 在兩端分別設定為棧底, 並且分別初始化棧頂, 實現可以在兩端進行入棧和出棧操作, 並且互不干擾, 模擬分工成兩個棧, 當兩個棧頂索引重合時, 這代表該共享棧已滿.

具體實現

定義一個共享棧

//定義一個共享棧
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;
}

效果圖
在這裡插入圖片描述

希望該文章對大家有所幫助
同時真誠接受大家寶貴的評論的建議