Pop函數(shù)改成這樣:
創(chuàng)新互聯(lián)公司服務(wù)熱線:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十年,包括邊坡防護(hù)網(wǎng)等多個(gè)領(lǐng)域擁有豐富的網(wǎng)站運(yùn)維經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花。
int Pop (Stack * pstack, int * pname)
{
if(pstack-top=0)
{
return 0;
}
pstack-top--;
* pname = pstack-data[pstack-top];
return 1;
}
Push函數(shù)改成這樣:
int Push (Stack * pstack, int num)
{
if(pstack-top=Stack_size)
{
printf("Push Error!");
return 0;
}
pstack-data[pstack-top]=num;
pstack-top++;
return 0;
}
試試(原來那樣當(dāng)元素達(dá)到最大數(shù)目時(shí)pstack-top就越界了)。
#include?stdio.h
#include?conio.h
#include?stdlib.h
#define?elemType?int /*?鏈棧元素?cái)?shù)據(jù)類型?*/
#define?SNODE_SIZE?sizeof?(struct?sNode) /*?鏈棧結(jié)點(diǎn)空間大小?*/
#define?status?int /*?狀態(tài)型變量?*/
#define?OVERFLOW?-1 /*?內(nèi)存溢出狀態(tài)碼?*/
#define?ERROR?0 /*?錯(cuò)誤狀態(tài)碼?*/
#define?OK?1 /*?正確狀態(tài)碼?*/
/*?鏈棧結(jié)點(diǎn)存儲(chǔ)結(jié)構(gòu)?*/
typedef?struct?sNode?{
elemType?data;
struct?sNode?*next;
}?sNode,?*sNodePtr;
/*?鏈棧存儲(chǔ)結(jié)構(gòu)?*/
typedef?struct?linkStack?{
sNodePtr?top;?/*?棧頂指針?*/
}?linkStack;
/*?初始化?*/
/*?操作結(jié)果:構(gòu)造一個(gè)帶頭結(jié)點(diǎn)的空鏈棧S?*/
void?initStack?(linkStack?*S)?{
S-top?=?(sNodePtr)?malloc?(SNODE_SIZE);?/*?產(chǎn)生頭結(jié)點(diǎn),棧頂指針指向此頭結(jié)點(diǎn)?*/
if?(!S-top)?/*?內(nèi)存分配失敗?*/
exit?(OVERFLOW);
S-top-next?=?NULL;
}
/*?銷毀?*/
/*?初始條件:鏈棧S已存在。操作結(jié)果:銷毀鏈棧S?*/
void?destroyStack?(linkStack?*S)?{
sNodePtr?p,?q;
p?=?S-top;?/*?p指向S的頭結(jié)點(diǎn)?*/
while?(p)?{
q?=?p-next;?/*?q指向p的下一個(gè)結(jié)點(diǎn)?*/
free?(p);?/*?回收p指向的結(jié)點(diǎn)?*/
p?=?q;?/*?p移動(dòng)到下一個(gè)結(jié)點(diǎn)?*/
}?/*?直到?jīng)]有下一個(gè)結(jié)點(diǎn)?*/
}
/*?判斷鏈棧是否為空?*/
/*?初始條件:鏈棧S已存在。操作結(jié)果:若S為空鏈棧,則返回TRUE,否則返回FALSE?*/
status?stackIsEmpty?(linkStack?*S)?{
return?S-top-next?==?NULL;
}
/*?入棧?*/
/*?操作結(jié)果:在S的棧頂插入新的元素e?*/
status?push?(linkStack?*S,?elemType?e)?{
sNodePtr?p;
p?=?(sNodePtr)?malloc?(SNODE_SIZE);?/*?產(chǎn)生新結(jié)點(diǎn)?*/
if?(!p)?/*?內(nèi)存分配失敗?*/
exit?(OVERFLOW);
p-data?=?e;
p-next?=?S-top-next;?/*?將新結(jié)點(diǎn)鏈接到原棧頂?*/
S-top-next?=?p;?/*?棧頂指向新結(jié)點(diǎn)?*/
}
/*?出棧?*/
/*?操作結(jié)果:刪除S的棧頂元素,并由e返回其值?*/
status?pop?(linkStack?*S,?elemType?*e)?{
sNodePtr?p;
if?(stackIsEmpty?(S))
return?ERROR;
p?=?S-top-next;?/*?p指向鏈棧的第一個(gè)結(jié)點(diǎn)?*/
*e?=?p-data;?/*?取出數(shù)據(jù)?*/
S-top-next?=?p-next;
free?(p);?/*?刪除該結(jié)點(diǎn)?*/
if?(S-top?==?p)?/*?棧為空?*/
S-top-next?=?NULL;
return?OK;
}
/*?打印棧內(nèi)容?*/
/*?初始條件:鏈棧S已存在。操作結(jié)果:當(dāng)棧不為空時(shí),打印棧內(nèi)容并返回OK,否則返回ERROR?*/
status?printStack?(linkStack?*S)?{
sNodePtr?p;
if?(stackIsEmpty?(S))?{
puts?("The?stack?is?empty!?");
return?ERROR;
}
p?=?S-top-next;
while?(p)?{
printf?("%d\t",?p-data);
p?=?p-next;
}
putchar?('\n');
return?OK;
}
int?main?(void)?{
linkStack?S;
elemType?e;?
elemType?a,?b,?c,?d;
a?=?1;?b?=?2;?c?=?3;?d?=?4;
initStack?(S);
push?(S,?a);
push?(S,?b);
push?(S,?c);
push?(S,?d);
puts?("Push?4?elements");
printf?("S:\t");
printStack?(S);
putchar?('\n');
pop?(S,?e);
puts?("Pop?1?element");
printf?("S:\t");
printStack?(S);
destroyStack?(S);
getch?();?/*?屏幕暫留?*/
return?0;
}
如有問題,可以點(diǎn)擊頭像聯(lián)系我
關(guān)于 pop 函數(shù),我不太確定題主說的是哪個(gè)函數(shù),因?yàn)?C 語言的標(biāo)準(zhǔn)函數(shù)庫是沒有 pop 這個(gè)函數(shù)的。如果題主說的是 C++ 的 Stack 類中的 pop 函數(shù)的話,它并不是一個(gè)縮寫,因?yàn)閺臈V腥≈档牟僮骶徒凶?pop。
然后就是查詢單詞原型的網(wǎng)站,因?yàn)?C 語言好多函數(shù)庫中的函數(shù)名都是按照很奇怪的方法縮寫的,所以基本上沒有一個(gè)專門查全稱的網(wǎng)站。不過題主可以參考
這個(gè)網(wǎng)站里面雖然沒有指出具體的縮寫方式,但是能很好地解釋 C 語言標(biāo)準(zhǔn)函數(shù)庫的所有函數(shù)的作用。通過它的介紹你應(yīng)該會(huì)對(duì)函數(shù)的全稱有一個(gè)大概的理解。比如說這個(gè)針對(duì) stdio.h 頭文件中所定義函數(shù)的解釋:
不光是 C 語言,C++ 的標(biāo)準(zhǔn)類庫的信息也可以在這個(gè)網(wǎng)站中找到。
這個(gè)算是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容講解的是一個(gè)叫做棧類型的數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)就是后進(jìn)先出--最后放進(jìn)去的數(shù)據(jù)最先拿出來。pop函數(shù)就是拿出數(shù)據(jù)的操作,push是放入是數(shù)據(jù)的操作。
內(nèi)容拓展:
pop函數(shù)呵push函數(shù)的使用:
#include stdio.h
#include unistd.h
#include pthread.h
void *clean(void *arg)
{
printf("cleanup: %s \n",(char *)arg);
return (void *)0;
}
void * thr_fn1(void * arg)
{
printf("chread 1 start \n");
pthread_cleanup_push((void *)clean,"thraed 1 first handler");
pthread_cleanup_push((void *)clean,"thread 1 second handler");
printf("thread 1 push complete \n");
if(arg)
{
return ((void *)1);
}
pthread_cleanup_pop(0);
pthread_cleanup_pop(0);
return (void *)1;
}
//輸出結(jié)果: chread 1 start -thread 1 push complte?
//push和pop框起來的代碼,不管正常退出還是異常退出,都將執(zhí)行清除函數(shù),但是存在特例:不包括return 退出。
當(dāng)前名稱:c語言棧的pop函數(shù) c語言pop
網(wǎng)站路徑:http://jinyejixie.com/article26/doohecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、服務(wù)器托管、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)、、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)