在實現鏈棧功能時,發現鏈棧的數據結構與鏈表的基本操作沒有太大區別,但其最重要功能為先入后出,那么鏈棧為什么能實現這樣的功能呢
以下為鏈棧的壓棧彈棧過程
---------------------------------------------------------------------------
void Stack::Push(DataType e)
{StackNode *p;p=new StackNode;p->data=e;p->next=top->next;top->next=p;}DataType Stack::Pop(){StackNode *p;if(IsEmpty()){cout<<""<<endl;}else{p=top->next;DataType m=p->data;top->next=p->next;delete p;return m;}}
以下為鏈表的從頭結點插入與從尾部結點插入
-------------------------------------------------------------------------
void LinkList::Creat(DataType a[],int n){Node *q=head;Node *p;int k=0;while(k<n){p=new Node;p->data=a[k];p->next=q->next;q->next=p;q=p;k++;}}void LinkList::Creat1(DataType a[],int n) //頭部插入{Node *p;int k=n-1;while(k>=0){p=new Node;p->data=a[k];p->next=head->next;head->next=p;n--;}}
對比鏈棧和鏈表的創建和刪除過程可以發現,鏈棧的壓棧過程和鏈表的從頭結點插入實現方式一樣,這樣就不難解釋為什么鏈棧能夠實現先入后功能。后插入的結點距離top結點近,在彈棧過程中先彈出。因此實現了先入后出功能
新聞熱點
疑難解答