**為共享棧的相關操作,主要操作為初始化棧、兩端分別入棧出棧,分別進行棧頂元素獲取等功能。**由標頭檔案(sqdoublestack.h)、介面實現(sqdoublestack.c)和測試檔案(main.c)三部分組成。
sqdoublestack.h
#ifndef __sqdstack__
#define __sqdstack__
#include
#include
#include
#pragma warning(disable:4996)
#define maxsize 50
typedef
int elemtype;
typedef
struct sqdoublestack
sqdoublestack;
bool stackinit
(sqdoublestack *s)
;bool stackpush1
(sqdoublestack* s,elemtype x)
;bool stackpush2
(sqdoublestack* s, elemtype x)
;bool stackpop1
(sqdoublestack* s, elemtype *x)
;bool stackpop2
(sqdoublestack* s, elemtype *x)
;bool gettop1
(sqdoublestack s, elemtype* x)
;bool gettop2
(sqdoublestack s, elemtype* x)
;#endif
sqdoublestack.c
#include
"sqdoublestack.h"
bool stackinit
(sqdoublestack *s)
s->top1 =-1
; s->top2 = maxsize;
return true;
}bool stackpush1
(sqdoublestack* s, elemtype x)
bool stackpush2
(sqdoublestack* s, elemtype x)
bool stackpop1
(sqdoublestack* s, elemtype *x)
bool stackpop2
(sqdoublestack* s, elemtype *x)
*x = s->data[s->top2++];
return true;
}bool gettop1
(sqdoublestack s, elemtype* x)
bool gettop2
(sqdoublestack s, elemtype* x)
*x = s.data[s.top2]
;return true;
}
main.c
#include
"sqdoublestack.h"
intmain
(int argc,
const
char
* ar**)
printf
("請輸入要插入棧1的元素:\n");
scanf
("%d"
,&x)
; tag =
stackpush1
(&s, x);if
(tag == true)
printf
("請輸入要插入棧2的元素:\n");
資料結構 共享棧和鏈式結構棧
共享棧其實就是兩個棧,合起來,共享乙個陣列存資料。這樣子的好處就是,兩個棧同乙個空間。當棧1的資料多,棧2資料比較少,就可以這樣子共享,對空間的浪費就會減少。當棧1為空,top1 1 棧2為空,top2 n 關鍵 有兩個棧底,和兩個棧頂top1,top2,從陣列兩端向中間靠攏。當 top1 1 to...
資料結構 3 1 2 共享棧
在純陣列形式上做改動,兩個變數用於記錄兩個棧的棧頂元素位置。struct stack 本質上就是兩個棧的混合,分別記為front和back,front是在前面的棧,初始化為 1,從頭開始增加,back是在後面的棧,初始化為initsize,從尾部開始遞減。特別的地方是判斷是否滿了,如果兩個位置相隔為...
資料結構 棧和佇列相關操作
include using namespace std 棧typedef struct stack 初始化棧 void stack init stack s 入棧 void stack push stack s,int e s.top e s.top 出棧 void stack pop stack ...