棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端
稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo(last in first out)的原則。
壓棧:棧的插入操作叫做進棧/壓棧/入棧,入資料在棧頂。
出棧:棧的刪除操作叫做出棧。出資料也在棧頂。
棧的實現一般可以使用陣列或者鍊錶實現,相對而言陣列的結構實現更優一些。因為陣列在尾上插入資料的代價比較小,本篇部落格採用的就是陣列
typedef
int stdatatype;
typedef
struct stack
stack;
void
stackinit
(stack* ps)
void
stackpush
(stack* ps, stdatatype data)
else
} ps->_a[ps->_top]
= data;
//棧頂位置賦值為data
ps->_top++
;//棧頂後移一位
}
void
stackpop
(stack* ps)
ps->_top--
;//棧不為空,棧頂前移一位
}
stdatatype stacktop
(stack* ps)
return ps->_a[ps->_top -1]
;//棧不為空,返回棧頂元素
stack.**件
#pragma once
#include
#include
#include
// 支援動態增長的棧
typedef
char stdatatype;
typedef
struct stack
stack;
// 初始化棧
void
stackinit
(stack* ps)
;// 入棧
void
stackpush
(stack* ps, stdatatype data)
;// 出棧
void
stackpop
(stack* ps)
;// 獲取棧頂元素
stdatatype stacktop
(stack* ps)
;// 獲取棧中有效元素個數
intstacksize
(stack* ps)
;// 檢測棧是否為空,如果為空返回非零結果,如果不為空返回0
intstackempty
(stack* ps)
;// 銷毀棧
void
stackdestroy
(stack* ps)
;
stack.c檔案
#include
"stack.h"
// 初始化棧
void
stackinit
(stack* ps)
// 入棧
void
stackpush
(stack* ps, stdatatype data)
else
} ps->_a[ps->_top]
= data;
//棧頂位置賦值為data
ps->_top++
;//棧頂後移一位
}// 出棧
void
stackpop
(stack* ps)
ps->_top--
;//棧不為空,棧頂前移一位
}// 獲取棧頂元素
stdatatype stacktop
(stack* ps)
return ps->_a[ps->_top -1]
;//棧不為空,返回棧頂元素
}// 獲取棧中有效元素個數
intstacksize
(stack* ps)
// 檢測棧是否為空,如果為空返回非零結果,如果不為空返回0
intstackempty
(stack* ps)
else
}// 銷毀棧
void
stackdestroy
(stack* ps)
test.c
#include
"stack.h"
void
test()
printf
("\n");
stackdestroy
(&s);}
intmain()
資料結構 棧的簡單理解以及對棧的基本操作
先來簡單的了解一下棧 1.棧 一種特殊的線性表,其實只允許在固定的一端進行插入或刪除操作。進行資料插入和刪除的一端稱為棧頂,另一端稱為棧底。不含任何元素的棧稱為空棧,棧又稱為 後進先出的線性表。2.順序棧和順序表資料成員相同,不同之處 順序棧的入棧和出棧操作只允許對當前棧頂進行操作!棧的初始化 vo...
資料結構之棧的基本操作
棧的結構型別,和基本操作如下 typedef struct stack,st void initstack stack s 初始化棧 void destroystack stack s 銷毀棧 void push stack st,type e 插入元素 type pop stack st 彈出棧頂...
資料結構的鏈棧基本操作
本程式主要是實現 建立空棧 進棧 出棧 清空棧 判空 取棧頂元素 取棧底元素 獲取棧元素長度 銷毀 include include include linkstack.h int main void pushstack mystack,100 pushstack mystack,200 pushst...