1. 程式人生 > >資料結構那點事--棧(鏈式結構)

資料結構那點事--棧(鏈式結構)

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType; 
typedef int Status;
#define OK 1
#define ERROR 0
//棧的鏈式儲存結構 
typedef struct StackNode
{
	ElemType data;
	struct StackNode *next;
 }StackNode,*LinkStackPtr;
 
typedef struct LinkStack
 {
 	LinkStackPtr top;
 	int count;
 }LinkStack;
//初始化棧
Status InitStack(LinkStack *S)
{
	S->top=NULL;
}
//是否棧空 
Status StackEmpty(LinkStack *S)
{
  	if(S->top==NULL)
	  {
	  	return OK;
	   } 
	   return ERROR;
} 
//入棧
 Status Push(LinkStack *S,ElemType e)
{
 	LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
 	s->data=e;
 	s->next=S->top;  //將棧頂元素賦給新節點的後繼 
 	S->top=s;          //將新節點s賦給棧頂元素 
 	S->count++;
 	return OK;
} 
  //出棧 
Status Pop(LinkStack *S,ElemType *e)
{
	LinkStackPtr p;
	
	if(StackEmpty(S))
	{
	   return ERROR; 
    }
     
    *e=S->top->data;
    p=S->top;
    S->top=S->top->next;
    free(p);
    S->count--;
    return OK;
}
int main()
{
	LinkStack s;
	InitStack(&s);
	int m,n;
 	cout<<"輸入壓棧元素數目:"<<endl;
 	cin>>m; 
 	cout<<"輸入壓棧元素:"<<endl;
 	for(int i=0;i<m;i++)
 	{
 	cin>>n;
 	Push(&s,n);
    }
    int h;
    cout<<"輸出棧元素:"<<endl;
   while(!StackEmpty(&s))
 {
    	Pop(&s,&h);
    	cout<<h<<" ";
	}
    cout<<endl;    
}