資料結構 之 棧(Stack)的實現及簡單操作

2021-08-18 03:15:20 字數 1655 閱讀 9026

棧是限定僅在表尾進行插入和刪除操作的線性表,由於棧只能在尾進行插入和刪除,所以這裡我們選用順序表來實現棧更方便快捷一點

對於棧我們要做的有棧的初始化,入棧,出棧,檢視棧頂元素,檢視棧內元素個數,清空棧,列印棧

在stack.h:中對棧相關介面函式進行宣告以及對棧的結構體進行定義

stack.h:

#pragma once

#define num 50//棧的大小

typedef int datatype;

typedef struct stack

stack;

// 棧的實現介面

void stackinit(stack* s);//棧的初始化

void stackpush(stack* s, datatype x);//入棧

void stackpop(stack* s);//出棧

datatype stacktop(stack* s);//檢視棧頂元素

size_t stacksize(stack* s);//棧內元素個數

int stackempty(stack* s);//清空棧

void stackprintf(stack* s);//列印棧內元素(由棧底到棧頂)

這裡用巨集定義棧的大小

接著在stack.c中對相關介面函式一一實現

stack.c:

#define _crt_secure_no_warnings 1

#include#include#include#include"stack.h"

void stackinit(stack* s)//初始化棧

printf("棧初始化失敗!!");

return;

}void stackpush(stack* s, datatype x)//入棧

s->_array[s->_top] = x;

s->_top++;

}void stackpop(stack* s)//出棧

datatype stacktop(stack* s) //棧頂元素

else

return s->_array[s->_top- 1];

}size_t stacksize(stack* s)//棧內元素個數

int stackempty(stack* s)//清空棧

void stackprintf(stack* s)//列印棧內元素

printf("\n");

}int main()

這裡我們用巨集定義棧的大小,需要注意的是因為棧的大小是一定的,所以在入棧時候要判斷棧是否是滿的,這裡如果不加以判斷就有可能造成訪問越界,在這裡當棧滿時 螢幕列印 stack overflow

關於stack overflow這個問題我們在平時寫遞迴時候如果不慎寫出死迴圈之類的問題經常程式因為棧溢位而掛掉

int main()

簡單的對相關介面進行測試

python資料結構之棧(stack)

目錄 棧的定義 棧的基本操作 小練習棧遵循後進先出 last in first out 現實生活中也有不少這樣的例子,比如在學校食堂吃完飯時,你把盤子放到桌子上,疊起來之後,阿姨過來拿盤子出去洗,假如是手洗,那肯定是先從最上面的盤子開始拿來洗的,而最上面的盤子是最後放上去的,卻是第乙個 被拿出來的,...

C 資料結構之Stack(棧)

stack,棧,是好比堆積木似的資料結構,從上之下堆積,取出時按 lifo last int first out後進先出的規則。棧一般為執行緒所獨有,也就是每個執行緒有其自有的棧,與heap堆一般為共有的不同 heap為程序所用,stack為執行緒所用?stack主要有四種操作 empty判斷棧是否...

資料結構 棧(Stack)

只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。棧頂 top 線性表允許進行插入和刪除的一端。棧底 bottom 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素。如上圖 a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和...