數據結構5:棧

只允許在同一端點處進行插入或刪除的表結構成爲棧

插入的一端稱爲棧頂;另一端稱爲棧尾。

將元素放入棧是進棧,將元素取出成爲退棧

特點

  • 棧是一種後進先出結構
  • 又稱後進先出表(LIFO表)

分類

  • 順序棧
  • 鏈式棧

一、順序棧

1.定義

#define EMPTY -1 //空棧的棧頂指針
const int m=1000;//預定的棧空間大小
int s[m];//定義順序棧
  • 進棧退棧算法需要能夠配合
  • 程序執行期間,降不定期的進棧、出棧
  • 開始時,棧空,指針top的值等於EMPTY

2.進棧算法

int push(int s[],int &top,int x)//進棧函數
{
    if(top==m-1)return 0;//表示棧滿,不能進棧
    s[++top]=x;
    return 1;//表示進棧成功
}

3.退棧算法

int pop(int s[],int &top,int &x)//退棧函數
{
    if(top==EMPTY)return 0;//表示棧空,不能出棧
    x=s[top--];
    return 1;//表示出棧成功
}

4.兩個堆棧利用空間

typedef struct stack{
    int a[N];
    int top1,top2;
}stack;
stack s;
//top1位於最左側,top2位於最右側,如果top1==top2,則說明棧滿。

二、鏈式棧

1.進棧算法

int push(ptr &top,int x)
{
    ptr p;
    p=new snode;//申請結點
    if(p==NULL)return 0;//申請失敗
    p->data=x;//x進棧
    p->next=top;//表頭插入法
    top=p;//修改表頭指針
    return 1;//進棧成功
}

2.出棧算法

int pop(ptr &top.int &x){
    ptr p;
    if(top==NULL)return 0;//退棧不成功
    x=top->data;
    p=top;//表頭刪除法
    top=top->next;
    free(p);
    return 1;//退棧成功
}

三、棧的應用——程序中斷

​ 中斷是操作系統實現程序“併發執行”的重要技術。當程序要求輸入輸出數據時,主機向外設發出輸入輸出命令,由外設完成具體的輸入輸出操作。由於主機速度比外設速度快得多,爲了提高主機工作效率,主機在發出輸入輸出命令後,不是空等外設傳輸完畢在工作,而是繼續運行系統中的其他程序。

中斷:一個程序執行期間,被其他程序所打斷。

斷點:打斷的地方

現場:被打斷的程序當前執行情況

棧架:一個現場

保護現場和回覆現場,嵌套中斷的現場需要層層保護。必須“後進先出”——棧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章