1. 程式人生 > >嚴蔚敏版資料結構——順序棧

嚴蔚敏版資料結構——順序棧

其實也是順序表的一種特殊的操作,實際操作個人覺得要比順序表還簡單。上程式碼看看:

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0

typedef struct 
{
	int *base;
	int *top;
	int stacksize;
}SqStack;

//---------順序表的初始化------------ 
int InitStack(SqStack &S)
{
	S.base=new int[100];
	if(S.base==NULL)
	return ERROR;
	
	S.top=S.base;
	S.stacksize=100;
	return OK;
	
}
//----------入棧---------------------
int Push (SqStack &S,int e)
{
	if(S.top-S.base==S.stacksize)
	return ERROR;
	*S.top=e;//這裡要注意先賦值,top再往上移動
	S.top++;
	return OK;
 } 

//_-----------打印出來看看-------------
int Print(SqStack S)
{
	int i;
    int *p;//用來遍歷的指標
	p=S.base;
	for(i=0;i<(S.top-S.base);i++)
	{
		printf("第%d個數是:%d\n",i+1,*(p+i));
	}
	return OK;
}
//------------出棧-------------------

int Pop(SqStack &S)
{
	int item;
	if(S.top==S.base)
	{
		return ERROR;
	}
	
	S.top--;  //注意,top是空的,先下移才能得到棧頂元素
	item = *S.top;
	

	return item;
	
}
//----------取棧頂元素---------------
int GetTop(SqStack S)
{
	if(S.top!=S.base)
		return *(S.top-1);  //下移一個才是棧頂
}

int main()
{
	int i;
	SqStack S;
	InitStack(S);
//-----入棧五個數-----
	for(i=1;i<=5;i++)
		Push(S,i);
	Print(S);
//-----出棧-----------
	printf("\n出棧元素為:%d",Pop(S));
	printf("\n出棧後的棧表如下:\n");
	Print(S);
//------列印棧頂元素看看----
	printf("\n列印棧頂元素是:%d\n",GetTop(S));	

	return 0;
}

執行結果