天天看點

利用數組建立棧

棧在計算機的世界中是一種重要的資料結構,棧的出現讓遞歸成為可能,同時棧的思想也是解決問題的一種方法,棧最重要的特點就是“先進後出”(first in last out),可以将棧想象成一個木桶,木桶的底部是封住的,頂部才有開口,入棧就是向木桶中存儲東西,但是從化木桶中取東西的話始終隻能操作目前的最頂部的東西,而且木桶放滿之後就不能再存入,這就是棧比較形象的比喻,向棧中存入元素和出棧要判斷棧中是否占滿和為空的情況,我們設定一個top指針,來顯示目前棧中的情況,棧的具體建立過程我們用以下代碼實作:

#include <stdio.h> //用數組實作棧
#include <stdlib.h>
#define Max_size 10 // 棧中元素的最大值
int push(int *s,int t,int val );
int pop(int *s,int t,int val);
void Creat_stack();
int main()
{
    int a[Max_size+1]={1,2,3,4,5,6,7,8,9,10,11};
    int top=-1,*stack;
    stack=(int *)malloc(Max_size*sizeof(int));//動态建立棧的記憶體空間
    Creat_stack(stack,top,a);
    return 0;
}
void Creat_stack(int *s,int t,int *a)
{
    int i;
    for(i=0;i<Max_size+1;i++)
    {
        if(t==Max_size-1){
            t=pop(s,t,a[i]); //棧滿時将棧頂元素彈出
        }
        t=push(s,t,a[i]); //棧未滿時向棧中壓入值
    }
}
int push(int *s,int t,int val)  //元素入棧
{
    s[++t]=val; //棧頂元素先加一再存值
    printf("%d已經入棧\n",val);
    return t;
}
int pop(int *s,int t,int val)  //使元素出棧
{
    printf("%d已經出棧\n",s[t--]); //先輸出提示棧頂值已經被彈出再減一
    return t;
}
           

需要注意的是傳給棧的數組要比Max_size大一些用來展現push函數的作用,棧是一種非常重要的資料結構,棧的出現為遞歸的實作提供了可能性,遞歸的過程為解決問題提供了不一樣的思路。

繼續閱讀