乙個陣列實現兩個棧的例程

2021-10-03 18:24:25 字數 1902 閱讀 2571

//該程式僅用乙個陣列而實現兩個棧的例程。

//除非陣列的每乙個單元都被使用

//否則你的棧例程不能有溢位宣告

#include

#include

#define minstacksize (5)

typedef

struct node *dbstack;

//雙棧

dbstack creatstack

(int maxelements)

;//構建乙個大小為maxelements的陣列

void

firstpush

(int x, dbstack a)

;//頭棧push

void

lastpush

(int x, dbstack a)

;//尾棧push

intfirstpop

(dbstack a)

;//頭棧pop並返回元素

intlastpop

(dbstack a)

;//尾棧pop並返回元素

void

isempty

(dbstack a)

;//判斷元素是否為空

void

isfull

(dbstack a)

;//判斷元素是否滿了

struct node

;int

main()

void

firstpush

(int x, dbstack a)

//頭棧push

a->array[0]

= x;

// printf("%d\n", a->array[0]);

a->capacity--;}

else

}void

lastpush

(int x, dbstack a)

//尾棧push

else

}int

firstpop

(dbstack a)

//頭棧pop並返回元素

a->capacity++

; a->first--

;return firstelement;

}else

}int

lastpop

(dbstack a)

//尾棧pop並返回元素

(a->capacity)++;

(a->last)--;

}else

}void

isempty

(dbstack a)

//判斷元素是否為空

else

}void

isfull

(dbstack a)

//判斷元素是否滿了

else

}dbstack creatstack

(int maxelements)

//構建乙個大小為maxelements的陣列

s =(dbstack)

malloc

(sizeof

(struct node));

if(s ==

null

)

array =

(int*)

malloc

(sizeof

(int

)* maxelements)

;

s->array = array;

s->capacity = maxelements;

s->first =0;

s->last =0;

return s;

}void

makeempty

(dbstack a)

乙個陣列實現兩個棧

題目 乙個陣列a 1.n 來實現兩個棧,使得兩個棧中的元素總和不到n時,兩個都不會發生上溯。思路 1 建立乙個陣列,分別從兩邊開始,依次往中間走。思路 2 建立乙個陣列,乙個走奇數字,乙個走偶數字。奇偶方式 define crt secure no warnings includeusing nam...

乙個陣列實現兩個棧

乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...

乙個陣列實現兩個棧

乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...