欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

顺序栈的操作(含双栈共享)

程序员文章站 2022-03-10 11:54:37
...

定义:

typedef int SElemType;
typedef struct
{
	SElemType data[MAXSIZE];
	int  top;      			 /* 课程中top(栈顶)指向栈顶元素的下一个位置,即下次压栈时元素所放的位置 */
	/*  int stacksize;       栈当前可以使用的最大容量 */
}SqStack;

而此处的定义是:top指向栈顶元素在数组中的位置。top必然小于 stacksize;空栈时 top = -1
而且此处的top 不是指针,是数组的序号。

进栈操作:

/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *S, SElemType e)
{
	if ( S->top == MAXSIZE - 1 ) return Error;
	S->top++;
	S->data[S->top] = e;
	return OK;
}

出栈操作:

Status Pop(SqStack *S, SElemType *e)
{
	if (S->top == -1) return Error;
	*e = S->data[S->top];
	S->top--;
	return OK;
}

=============================================================

双栈共享空间的定义:

typedef struct
{
	SElemType data[MAXSIZE];
	int top1;
	int top2;
} SqDoubleStack;

双栈的压栈操作:

   /* 插入元素e 为新的栈顶元素 */
  Status Push(SqDoubleStack *S, SElemType e, int stackNumber)
        {
        	if (S->top1 + 1 == S->top2) return Error;
        	if (stackNumber == 1) 
        		S->data[++S->top1] = e;
        	else if (stackNumber == 2)
        		S->data[--S->top2] = e;
        	return OK;
        }

双栈的出栈操作:

/*  若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回Error */
Status Pop(SqDoubleStack *S, SElemType *e, int stackNumber)
{
	if (stackNumber == 1)
		{
			if (S->top1 <= -1) return Error;
			*e = S->data[S->top1--];
		}
	else if (stackNumber == 2)
		{
			if (S->top2 >= MAXSIZE) return Error;
			*e = S->data[S->top2++];
		}
		return OK;
}
相关标签: 摘录 C语言 C