上一次用鍊結串列做過,不過說到堆疊,C語言最好還是用一般陣列寫

有鑑於此,所以這次我用陣列玩看看。

 

首先,要說明一下。堆疊的建構有幾個一定要出現的,比如說create功能(初始化堆疊)、push功能(置入)、pop功能(取出/刪除)、以及很重要的IsEmpty(判斷是否為空堆疊,沒有這個pop會出錯);除了這四個以外,如果用陣列來做,就一定要考慮到陣列空間是否已滿。如果用鍊結串列來做,因為空間是「需要才加上去」,空間配置是可動的,所以IsFull這個功能可以不要沒關係,但如果是陣列,沒有這個功能,恐怕就會有溢出問題。

 

 

#include <iostream>
using namespace std;

const int size = 10;//堆疊大小為十個空間
int top = -1;//一開始的時候堆疊頭標示為-1,表示是空堆疊


void get_top(int t)//用來改變傳回堆疊頭的位置
{
    top = t;
}
void create(int stack[size])//初始化功能
{
    for(int i=0; i<size; i++)
    {
        stack[i]=0;
    }//初始化每個位置為零
    get_top(-1);//復歸堆疊頭
}

int isempty(int t)//空堆疊判別功能
{
    if(t < 0){ cout<<"stack is EMPTY!"<<endl; return -1;}
    cout<<"stack is NOT EMPTY!"<<endl; return 0;
}//如果堆疊為空,傳回-1,不為空傳回0

int isfull(int t)//判別堆疊內容是否已滿
{
    if (t==(size-1)){ cout<<"stack is FULL"<<endl; return 1;}
    return 0;
}//如果堆疊滿了傳回 1,沒滿傳回0

int push(int stack[size], int t, int item)//置入元素
{
    if(isfull(t)==1){ return 0;}//假設陣列滿了,跳出
    else
    {
        stack[t+1]=item;
        get_top(t+1);
        return 0;
    }
}

int pop(int stack[], int t)//取出元素功能
{
    if(isempty(t)==-1){ return 0;}//先判斷他是不是空堆疊
    else
    {
    stack[t]=0;
    get_top(t-1);
    return 0;
    }
}

void main()
{
    int arr[size]={0};
    create(arr,top);
    push(arr,top,10);
    push(arr,top,11);
    push(arr,top,12);
    push(arr,top,13);
    push(arr,top,14);
    push(arr,top,15);
    push(arr,top,16);
    push(arr,top,17);
    push(arr,top,18);
    push(arr,top,19);
    pop(arr,top);
    for(int i=0; i<size; i++)
    {
        cout<<arr[i]<<"\t";
    }
    cout<<top<<endl;
    system("pause");
}2

相关文章