MOOC 2.2 堆栈

1. 顺序存储

#include <cstdio>
#define MaxSize <存储元素的最大个数> 
typedef struct SNode *Stack;
struct SNode
{
	ElementType Data[MaxSize];
	int Top;
};

// 1. 入栈
void Push(Stack PtrS, ElementType item)
{
	if(PtrS->Top == MaxSize - 1)
	{
		printf("堆栈满");
		return ;
	}
	else
	{
		PtrS->Data[++(PtrS->Top)] = item;
		return ;
	}
} 

// 2. 出栈
ElementType Pop(Stack PtrS)
{
	if(PtrS->Top == -1)
	{
		printf("堆栈空");
		return ERROR; 
	}
	else
	{
		return (PtrS->Data[(PtrS->Top)--]);
	}
} 

  

共享栈

// 共享栈
#define MaxSize <存储元素的最大个数>
struct DStack
{
	ElementType Data[MaxSize];
	int Top1;
	int Top2;
}S;

S.Top1 = -1;
S.Top2 = MaxSize;

void Push(struct DStack *PtrS, ElementType item, int Tag)
{
	if(PtrS->Top1 + 1 == PtrS->Top2)
	{
		printf("堆栈满");
		return ; 
	}
	if(Tag == 1)
		PtrS->Data[++(PtrS->Top1)] = item;
	else
		PtrS->Data[--(PtrS->Top2)] = item;
	return ;
}

ElementType Pop(struct DStack *PtrS, int Tag)
{
	// Tag作为区分两个堆栈的标志, 取值为1和2 
	if(Tag == 1)
	{
		if(PtrS->Top1 == -1)
		{
			printf("堆栈1空");
			return NULL; 
		}
		else
		{
			return PtrS->Data[(PtrS->Top1)--];
		}
	}
	else
	{
		if(PtrS->Top2 == MaxSize)
		{
			printf("堆栈2空");
			return NULL; 
		}
		else
		{
			return PtrS->Data[(PtrS->Top2)++];
		}
	}
}

  

3. 链式栈

// 堆栈的链式存储
typedef struct SNode *Stack;
struct SNode
{
	ElementType Data;
	struct SNode *Next;
};
// 栈顶指针top应该在链表的头部

// 1. 初始化堆栈(建立空栈) 
Stack CreateStack()
{
	Stack S;
	S = (Stack)malloc(sizeof(struct SNode));
	S->Next = NULL;
	return S;
} 

// 判断堆栈是否为空
int IsEmpty(Stack S)
{
	return (S->Next == NULL);
}

// 插入结点
void Push(ElementType item, Stack S)
{
	struct SNode *TmpCell;
	TmpCell = (struct SNode *)malloc(sizeof(struct SNode));
	TmpCell->Data = item;
	TmpCell->Next = S->Next;
	S->Next = TmpCell;
} 

// 删除结点
ElementType Pop(Stack S)
{
	struct SNode *FirstCell;
	ElementType TopElem;
	if(IsEmpty(S))
	{
		printf("堆栈空");
		return NULL; 
	}
	else
	{
		FirstCell = S->Next;
		S->Next = FirstCell->Next;
		TopElem = FirstCell->Data;
		free(FirstCell);
		return TopElem;
	}
} 

  

posted @ 2019-09-01 10:38  青衫客36  阅读(217)  评论(0编辑  收藏  举报