當前位置:編程學習大全網 - 源碼下載 - 堆棧實現c源代碼

堆棧實現c源代碼

#包含?& ltstdio.h & gt

#包含?& 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;

}如有疑問,點擊頭像聯系我。

  • 上一篇:求壹份用fortran語言編寫的牛頓叠代求解非線性方程組的源代碼。謝謝各位。 郵箱:370147046@qq.com
  • 下一篇:看韓劇電視劇下載什麽軟件
  • copyright 2024編程學習大全網