1. 程式人生 > >c語言棧的實現以及操作

c語言棧的實現以及操作

此文章包含了棧的結構體實現,單資料型別實現,以及清空,判空,入棧,出棧,求棧頂元素的實現

棧作為一個最簡單的資料結構,實現起來也非常容易,想想現在有一摞盤子,每次只能取走或放一個盤子且只能最上面進行操作;

那麼我們如果有一個索引TOP時刻指向最上面的那個盤子,棧不就實現了麼?

第一段是單資料型別的程式碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 110//棧的最大值
typedef int elem;    //方便修改資料型別
typedef struct{
    int top;    ///棧頂的索引
    elem index[maxn];
}Stack;
Stack stack;   ///為了方便這裡直接定義全域性變量了,用區域性變數的話在每個函式加上取地址符和宣告就行了
void stack_pop(){   ///元素出棧,此函式無返回值
    stack.top--;
}
void stack_push(elem buf){  ///元素入棧
    stack.index[++stack.top] = buf;
}
int stack_empty(){///判空,如果棧為空的話返回1,否則返回0
    return stack.top == -1;
}

void stack_clear(){ ///清空棧
    stack.top = -1;
}

int stack_size(){   ///求棧內元素數
    return stack.top+1;
}
elem stack_top(){   ///返回棧頂元素
    return stack.index[stack.top];
}

int main()
{
    stack_clear();///初始化棧
    elem buf;
    buf = 10;
    stack_push(buf);
    printf("%d\n",stack_top());
    printf("%d\n",stack_empty());
    printf("%d\n",stack_size());
    stack_pop();
    printf("%d\n",stack_size());
    return 0;
}

下面是結構體棧的實現,和上面的基本一樣,只修改了部分程式碼,添加了一個可以糅合資料型別的結構體陣列elem

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 11

typedef struct {
    int n;
    char str[maxn];
}elem;          ///要存用棧儲的資料型別

typedef struct{
    int top;    ///棧頂的索引
    elem index[maxn];
}Stack;
Stack stack;   ///為了方便這裡直接定義全域性變量了,用區域性變數的話加上取地址符和宣告就行了
void stack_pop(){   ///元素出棧,此函式無返回值
    stack.top--;
}
void stack_push(elem buf){  ///元素入棧
    stack.index[++stack.top].n = buf.n;
    strcpy(stack.index[stack.top].str,buf.str);
}
int stack_empty(){///判空,如果棧為空的話返回1,否則返回0
    return stack.top == -1;
}

void stack_clear(){ ///清空棧
    stack.top = -1;
}

int stack_size(){   ///求棧內元素數
    return stack.top+1;
}
elem stack_top(){   ///返回棧頂元素
    return stack.index[stack.top];
}

int main()
{
    stack_clear();
    elem buf;
    buf.n = 1;
    strcpy(buf.str,"abc");
    stack_push(buf);
    printf("%d  %s\n",stack_top().n,stack_top().str);
    printf("%d\n",stack_empty());
    printf("%d\n",stack_size());
    stack_pop();
    printf("%d\n",stack_size());
    return 0;
}