我是靠谱客的博主 冷酷雨,最近开发中收集的这篇文章主要介绍顺序栈共享,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

main.c函数:
/*设有两个栈S1和S2都采用顺序栈的方式存储,并且共享一个存储区*/
#include<stdio.h>
#include<stdlib.h>

#define STACKSIZE 100  
typedef int DataType;
#include "SSeqStack.h"
void main( )
{
	SSeqStack S;
	int i;
	DataType a[] = { 'a', 'b', 'c', 'd', 'e' };
	DataType b[] = { 'x', 'y', 'z', 'r' };
	DataType e1, e2;
	InitStack(&S);
	for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	{
		if (PushStack(&S, a[i], 0) == 0)
		{
			printf("栈已满,不能进栈!");
			return 0;
		}
	}
	for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)
	{
		if (PushStack(&S, b[i], 1) == 0)
		{
			printf("栈已满,不能进栈!");
			return 0;
		}
	}
	if (GetTop(S, &e1, 0) == 0)
	{
		printf("栈已空!");
		return 0;
	}
	if (GetTop(S, &e2, 1) == 0)
	{
		printf("栈已空!");
		return 0;
	}
	printf("左端栈栈顶元素是:%c,右端栈栈顶元素是:%cn", e1, e2);
	printf("左端栈元素的出栈顺序是:");
	i = 0;
	while (!StackEmpty(S, 0))
	{
		PopStack(&S, &e1, 0);
		printf("%4c", e1);
	}
	printf("n");

	printf("右端栈元素的出栈顺序是:");
	while (!StackEmpty(S, 1))
	{
		PopStack(&S, &e2, 1);
		printf("%4c", e2);
	}
	printf("n");
	return 0;
}
/*SSeqStack.h函数:*/

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

#define STACKSIZE 100  
typedef int DataType;
typedef struct
{
	DataType stack[STACKSIZE];
	int top[2];
}SSeqStack;

void InitStack(SSeqStack *S);//初始换栈  
int StackEmpty(SSeqStack S, int flag);//判断栈是否为空  
int GetTop(SSeqStack S, DataType *e, int flag);//取栈顶元素  
int PushStack(SSeqStack *S, DataType e, int flag);//入栈  
int PopStack(SSeqStack *S, DataType *e, int flag);//出栈  
int StackLength(SSeqStack S, int flag);//求栈长度  
void ClearStack(SSeqStack *S);//清空栈  

void InitStack(SSeqStack *S)//初始换栈  
{
	S->top[0] = 0;
	S->top[1] = STACKSIZE - 1;
}

int StackEmpty(SSeqStack S, int flag)//判断栈是否为空  
{
	switch (flag)
	{
	case 0:
		if (S.top[0] == 0)
		{
			return 1;
		}
		break;
	case 1:
		if (S.top[1] == STACKSIZE - 1)
		{
			return 1;
		}
		break;
	default:
		return 0;
	}
	return 0;
}

int GetTop(SSeqStack S, DataType *e, int flag)//取栈顶元素  
{
	switch (flag)
	{
	case 0:
		if (S.top[0] == 0)
		{
			return 0;
		}
		*e = S.stack[S.top[0] - 1];
		break;
	case 1:
		if (S.top[1] == STACKSIZE - 1)
		{
			return 0;
		}
		*e = S.stack[S.top[1] + 1];
		break;
	default:
		return 0;
	}
	return 1;
}

int PushStack(SSeqStack *S, DataType e, int flag)//入栈  
{
	if (S->top[0] == S->top[1])
	{
		return 0;
	}
	switch (flag)
	{
	case 0:
		S->stack[S->top[0]] = e;
		S->top[0]++;
		break;
	case 1:
		S->stack[S->top[1]] = e;
		S->top[1]--;
		break;
	default:
		return 0;
	}
	return 1;
}

int PopStack(SSeqStack *S, DataType *e, int flag)//出栈  
{
	switch (flag)
	{
		if (S->top[0] == 0)
		{
			return 0;
		}
	case 0:
		S->top[0]--;
		*e = S->stack[S->top[0]];
		break;
	case 1:
		if (S->top[1] == STACKSIZE - 1)
		{
			return 0;
		}
		S->top[1]++;
		*e = S->stack[S->top[1]];
		break;
	default:
		return 0;
	}
	return 1;
}

int StackLength(SSeqStack S)//求栈长度  
{
	return S.top[0] + S.top[1];
}

void ClearStack(SSeqStack *S)//清空栈  
{
	S->top[0] = 0;
	S->top[1] = STACKSIZE - 1;
}





最后

以上就是冷酷雨为你收集整理的顺序栈共享的全部内容,希望文章能够帮你解决顺序栈共享所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部