//該程式僅用乙個陣列而實現兩個棧的例程。
//除非陣列的每乙個單元都被使用
//否則你的棧例程不能有溢位宣告
#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...
乙個陣列實現兩個棧
乙個陣列實現兩個棧,和 共享棧其實是很類似的。有兩種方式實現 看圖就知道 一種是兩個棧增長方向一樣的 另一種起始位置分別在棧的兩端,往中間增長。方法一 增長方向一樣 方法 把陣列下標分為奇數和偶數 分別給兩個棧使用 如下 我在程式中注釋的 部分,可以放開 看看是什麼效果,注釋掉的那部分是我剛開始的想...
乙個陣列實現兩個棧
乙個陣列實現兩個棧 用乙個陣列實現兩個棧,有多種方法,但基本思路就下面三種方法,幾種演算法的實現區別不大,主要在與擴容時的條件,第一種 以中間向兩邊壓棧 可以採用兩個棧底分別在陣列中間,棧頂向兩邊移動,當兩個棧頂任意乙個到達陣列的兩邊時,陣列擴容。此種演算法有兩個擴容條件,二者滿足其一便擴容 即只要...