資料結構那點事--棧(鏈式結構)
阿新 • • 發佈:2018-12-12
#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; }