資料結構中棧的相關操作(共享棧)

2021-10-05 03:53:40 字數 2317 閱讀 9456

**為共享棧的相關操作,主要操作為初始化棧、兩端分別入棧出棧,分別進行棧頂元素獲取等功能。**由標頭檔案(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 ...