共享栈,创建,打印,入栈,出栈——C语言描述
共享栈,创建,打印,入栈,出栈——C语言描述
1. 共享栈的顺序存储结构
一个数组里面有两个栈指针,一个在数组下标为0(Top = -1时栈1为空栈),一个在数组尾(Top = MAXSIZE栈2为空栈)。当Top1 + 1 = Top2时,该共享栈为满栈。
代码:
#define SUCCESS 1
#define ERROR 0
#define MAXSIZE 5
typedef int ElemType;
typedef int LIST_STATUS;
typedef struct _SQ_DOUBLE_STACK {
ElemType Data[MAXSIZE];
int Top1;
int Top2;
}SQ_DOUBLE_STACK;
2 操作共享栈
创建,打印,入栈,出栈。
代码:
void OperateSQDoubleStack(void) {
LIST_STATUS Status;
SQ_DOUBLE_STACK *SqDbStack = (SQ_DOUBLE_STACK *)malloc(sizeof(SQ_DOUBLE_STACK));
int CreateNum = 4;
Status = CreateSQDoubleStack(SqDbStack, CreateNum);
if (SUCCESS == Status) {
printf("CreateSQDoubleStack succeed!\n");
}
else {
printf("CreateSQDoubleStack failed!\n");
}
PrintSQDoubleStack(SqDbStack);
}
3 创建共享栈
创建一个共享栈,两边栈的有个元素。
代码:
/*SQ_DOUBLE_STACK*/
LIST_STATUS CreateSQDoubleStack(SQ_DOUBLE_STACK *SqDbStack, int CreateNum) {
SQ_DOUBLE_STACK *TraDbStack;
int TraIndex;
printf("CreateSQDoubleStack start\n");
if (NULL == SqDbStack || CreateNum > MAXSIZE) {
return ERROR;
}
for (TraIndex = 0; TraIndex < MAXSIZE; ++TraIndex) {
if (TraIndex <=1 || TraIndex > 2) {
SqDbStack->Data[TraIndex] = TraIndex;
}
}
SqDbStack->Top1 = 1;
SqDbStack->Top2 = 3;
printf("CreateSQDoubleStack start\n");
return SUCCESS;
}
结果:
CreateSQDoubleStack start
CreateSQDoubleStack start
CreateSQDoubleStack succeed!
PrintSQDoubleStack start
TraDbStack->Top1 = 1
TraDbStack->Top2 = 3
PrintSQDoubleStack->Data[TraIndex] = 0
PrintSQDoubleStack->Data[TraIndex] = 1
PrintSQDoubleStack->Data[TraIndex] = -842150451
PrintSQDoubleStack->Data[TraIndex] = 3
PrintSQDoubleStack->Data[TraIndex] = 4
PrintSQDoubleStack end
4 打印共享栈
代码:
void PrintSQDoubleStack(SQ_DOUBLE_STACK * const SqDbStack) {
SQ_DOUBLE_STACK *TraDbStack = SqDbStack;
int TraIndex;
printf("PrintSQDoubleStack start\n");
printf("TraDbStack->Top1 = %d\n", TraDbStack->Top1);
printf("TraDbStack->Top2 = %d\n", TraDbStack->Top2);
for (TraIndex = 0; TraIndex < MAXSIZE; ++TraIndex) {
printf("PrintSQDoubleStack->Data[TraIndex] = %d\n", TraDbStack->Data[TraIndex]);
}
printf("PrintSQDoubleStack end\n\n");
}
5 共享栈——入栈
LIST_STATUS PushSQDoubleStack(SQ_DOUBLE_STACK *SqDbStack, int PushData, int StackNum)
通过StackNum编号来判断要入栈的编号。
代码:
LIST_STATUS PushSQDoubleStack(SQ_DOUBLE_STACK *SqDbStack, int PushData, int PushStackNum) {
printf("PushSQDoubleStack start\n");
if (NULL == SqDbStack || SqDbStack->Top1 + 1 == SqDbStack->Top2) {
return ERROR;
}
if (1 == PushStackNum) {
SqDbStack->Data[++SqDbStack->Top1] = PushData;
} else if (2 == PushStackNum) {
SqDbStack->Data[--SqDbStack->Top2] = PushData;
}
printf("PushSQDoubleStack end\n");
return SUCCESS;
}
结果:
CreateSQDoubleStack start
CreateSQDoubleStack start
CreateSQDoubleStack succeed!
PrintSQDoubleStack start
TraDbStack->Top1 = 1
TraDbStack->Top2 = 3
PrintSQDoubleStack->Data[TraIndex] = 0
PrintSQDoubleStack->Data[TraIndex] = 1
PrintSQDoubleStack->Data[TraIndex] = -842150451
PrintSQDoubleStack->Data[TraIndex] = 3
PrintSQDoubleStack->Data[TraIndex] = 4
PrintSQDoubleStack end
PushSQDoubleStack start
PushSQDoubleStack end
CreateSQDoubleStack succeed!
PrintSQDoubleStack start
TraDbStack->Top1 = 2
TraDbStack->Top2 = 3
PrintSQDoubleStack->Data[TraIndex] = 0
PrintSQDoubleStack->Data[TraIndex] = 1
PrintSQDoubleStack->Data[TraIndex] = 10
PrintSQDoubleStack->Data[TraIndex] = 3
PrintSQDoubleStack->Data[TraIndex] = 4
PrintSQDoubleStack end
6 共享栈——出栈
LIST_STATUS PopSQDoubleStack(SQ_DOUBLE_STACK *SqDbStack, int *PopData, int PopStackNum)
通过PopStackNum编号来判断要出栈的编号
代码:
LIST_STATUS PopSQDoubleStack(SQ_DOUBLE_STACK *SqDbStack, int *PopData, int PopStackNum) {
printf("PopSQDoubleStack start\n");
if (NULL == SqDbStack) {
return ERROR;
}
if (1 == PopStackNum) {
if (SqDbStack->Top1 == -1) {
return ERROR;
} else {
*PopData = SqDbStack->Data[SqDbStack->Top1--];
}
}
else if (2 == PopStackNum) {
if (SqDbStack->Top2 == MAXSIZE) {
return ERROR;
} else {
*PopData = SqDbStack->Data[SqDbStack->Top2++];
}
}
printf("PopSQDoubleStack end\n");
return SUCCESS;
}
结果:
CreateSQDoubleStack start
CreateSQDoubleStack start
CreateSQDoubleStack succeed!
PrintSQDoubleStack start
TraDbStack->Top1 = 1
TraDbStack->Top2 = 3
PrintSQDoubleStack->Data[TraIndex] = 0
PrintSQDoubleStack->Data[TraIndex] = 1
PrintSQDoubleStack->Data[TraIndex] = -842150451
PrintSQDoubleStack->Data[TraIndex] = 3
PrintSQDoubleStack->Data[TraIndex] = 4
PrintSQDoubleStack end
PopSQDoubleStack start
PopSQDoubleStack end
PopSQDoubleStack succeed!
*PopData = 1
PrintSQDoubleStack start
TraDbStack->Top1 = 0
TraDbStack->Top2 = 3
PrintSQDoubleStack->Data[TraIndex] = 0
PrintSQDoubleStack->Data[TraIndex] = 1
PrintSQDoubleStack->Data[TraIndex] = -842150451
PrintSQDoubleStack->Data[TraIndex] = 3
PrintSQDoubleStack->Data[TraIndex] = 4
PrintSQDoubleStack end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」