數據結構之隊列、棧和鏈表(二)

2 棧

2.1 什麼是棧

棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱爲棧頂,相對地,把另一端稱爲棧底向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。
棧這個概念比較淺顯易懂,設想一個場景,我們經常會遇到堆箱子的場景,首先放下的箱子就會被後來的箱子壓在最底層,這個箱子就被稱爲棧底,而後來堆上來的最頂層的箱子就被稱爲棧頂,新元素進入的過程我們就稱它爲入棧。當我們從這個箱子堆裏取出箱子的時候,肯定是要先取出最頂層的箱子 (下面的箱子被壓住了拿不出來),這個過程被稱爲出棧。棧中元素的特性就是先入後出 (First In Last Out)
在這裏插入圖片描述

2.2 棧的組成

棧由棧底、棧頂和數據數組三部分組成
下面是一個棧的結構體示例

struct stack{
    /*--這是一個棧的結構體,包含數據數組和棧頂,棧底爲data[0]--*/
    int data[100];
    int top
};

2.3 如何實現一個棧

以下是示例代碼,完成了基於棧的迴文判斷操作

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int  main(){
/*--這是基於stack(棧)來實現的一個迴文判斷--*/
char  a[101],s[101];
int i,len,mid,next,top;

    gets(a);
    len =  strlen(a);
    mid = len /  2  -  1;
    top =  0;
    for(i =  0;i <=mid;i++){
        s[++top] =  a[i];
    }
    if(len%2  ==  0){
        next = mid +  1;
    }
    else{
        next = mid +  2;
    }
    for(i = next; i <= len -  1;i++){
        if(a[i] !=  s[top]){
            break;
        }
        top--;
    }
    if(top ==  0){
        printf("YES");
    }
    else{
        printf("no");
    }
    system("pause");
    return  0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章