五算法設計題
[題目分析]兩棧共享向量空間將兩棧棧底設在向量兩端初始時s棧頂指針為s棧頂為maxsize兩棧頂指針相鄰時為棧滿兩棧頂相向迎面增長棧頂指針指向棧頂元素
#define maxsize 兩棧共享順序存儲空間所能達到的最多元素數
#define elemtp int //假設元素類型為整型
typedef struct
{elemtp stack[maxsize]; //棧空間
int top[]; //top為兩個棧頂指針
}stk;
stk s; //s是如上定義的結構類型變量為全局變量
()入棧操作
int push(int iint x)
//入棧操作i為棧號i=表示左邊的棧si=表示右邊的棧sx是入棧元素入棧成功返回否則返回
{if(i<||i>){printf(棧號輸入不對);exit();}
if(stop[]stop[]==) {printf(棧已滿\n);return();}
switch(i)
{case : sstack[++stop[]]=x; return(); break;
case : sstack[stop[]]=x; return();
}
}//push
() 退棧操作
elemtp pop(int i)
//退棧算法i代表棧號i=時為s棧i=時為s棧退棧成功返回退棧元素否則返回
{if(i< || i>){printf(棧號輸入錯誤\n)exit();}
switch(i)
{case : if(stop[]==) {printf(棧空\n)return()}
else return(sstack[stop[]]);
case : if(stop[]==maxsize {printf(棧空\n); return();}
else return(sstack[stop[]++]);
}
}//算法結束
[算法討論] 請注意算法中兩棧入棧和退棧時的棧頂指針的計算兩棧共享空間示意圖略s棧是通常意義下的棧而s棧入棧操作時其棧頂指針左移(減)退棧時棧頂指針右移(加)
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22708.html