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