#包含?& ltconio.h & gt
#包含?& ltstdlib.h & gt
#定義?elemType?int/*?鏈接棧元素數據類型?*/
#定義?SNODE_SIZE?sizeof?(struct?sNode)/*?鏈接棧節點的空間大小是多少?*/
#定義?地位?int/*?狀態變量?*/
#定義?溢出?-1 /*?內存溢出狀態碼?*/
#定義?錯誤?0 /*?錯誤狀態代碼?*/
#定義?好嗎?1 /*?正確的狀態代碼?*/
/*?鏈棧節點存儲結構?*/
typedef?struct?斯諾德?{
elemType?數據;
struct?斯諾德?*下壹個;
}?斯諾德?* sNodePtr
/*?鏈式堆棧存儲結構?*/
typedef?struct?linkStack?{
sNodePtr?頂;?/*?棧頂指針?*/
}?linkStack
/*?初始化?*/
/*?運算結果:用前導節點構造壹個空鏈棧s?*/
作廢?initStack?(linkStack?*S)?{
s-& gt;top?=?(sNodePtr)?馬洛克?(SNODE _ SIZE);?/*?生成壹個頭節點,棧頂指針指向這個頭節點?*/
如果?(!s-& gt;top)?/*?內存分配失敗?*/
退出?(溢出);
s-& gt;top-& gt;下壹個?=?NULL
}
/*?毀滅?*/
/*?初始條件:鏈棧s已經存在。操作結果:破壞鏈棧S?*/
作廢?destroyStack?(linkStack?*S)?{
sNodePtr?p,?q;
p?=?s-& gt;頂;?/*?p指向S的頭節點?*/
什麽時候?(p)?{
q?=?p->;接下來;?/*?q指向p的下壹個節點?*/
免費?(p);?/*?回收P指向的節點?*/
p?=?q;?/*?p移動到下壹個節點?*/
}?/*?直到沒有下壹個節點?*/
}
/*?確定鏈接棧是否為空?*/
/*?初始條件:鏈棧s已經存在。運算結果:如果s是空鏈棧,則返回TRUE,否則返回FALSE?*/
地位?stackIsEmpty?(linkStack?*S)?{
回歸?s-& gt;top-& gt;下壹個?==?NULL
}
/*?放入堆棧*/
/*?操作結果:在s棧頂插入壹個新元素e?*/
地位?推?(linkStack?*S,?elemType?e)?{
sNodePtr?p;
p?=?(sNodePtr)?馬洛克?(SNODE _ SIZE);?/*?創建新節點?*/
如果?(!p)?/*?內存分配失敗?*/
退出?(溢出);
p->;數據?=?e;
p->;下壹個?=?s-& gt;top-& gt;接下來;?/*?將新節點鏈接到原始棧頂?*/
s-& gt;top-& gt;下壹個?=?p;?/*?棧頂指向新節點?*/
}
/*?棧外*/
/*?運算結果:刪除s的頂部元素,用e返回其值?*/
地位?流行音樂?(linkStack?*S,?elemType?*e)?{
sNodePtr?p;
如果?(stackIsEmpty?(S))
回歸?錯誤;
p?=?s-& gt;top-& gt;接下來;?/*?p指向鏈棧的第壹個節點?*/
*e?=?p->;數據;?/*?拿出數據?*/
s-& gt;top-& gt;下壹個?=?p->;接下來;
免費?(p);?/*?刪除此節點嗎?*/
如果?(S-& gt;top?==?p)?/*?堆棧是空的?*/
s-& gt;top-& gt;下壹個?=?NULL
回歸?OK;
}
int?主要?(作廢)?{
linkStack?s;
elemType?e;
int?n;
initStack?(& amps);
scanf?(" %d ",& ampn);
/*除以基數並取余數*/
什麽時候?(N)?{
推?(& amps,?n % 2);
n?/=?2;
}
什麽時候?(!stackIsEmpty?(& amps))?{
流行音樂?(& amps,?& ampe);
printf?(" %d ",e);
}
destroyStack?(& amps);
getch?();?/*?屏幕暫留?*/
回歸?0;
}如有疑問,點擊頭像聯系我。