#include?stdio.h
成都創(chuàng)新互聯(lián)專注于阿榮網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供阿榮營銷型網(wǎng)站建設(shè),阿榮網(wǎng)站制作、阿榮網(wǎng)頁設(shè)計、阿榮網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造阿榮網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供阿榮網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
#include?stdlib.h
#define?MAXSIZE?32
typedef?struct{
int?*elem;/*?棧的存儲區(qū)?*/
??int?max;???/*?棧的容量,即找中最多能存放的元素個數(shù)?*/
??int?top;???/*?棧頂指針?*/?
}Stack;
int?InitStack(Stack?*S,?int?n)?/*創(chuàng)建容量為n的空棧*/
{
S-elem?=?(int?*)malloc(n?*?sizeof(int));
if(S-elem==NULL)?return?-1;
S-max=n;
S-top?=0;?//棧頂初值0
return?0;
}
int?Push(Stack?*S,?int?item)?/*將整數(shù)item壓入棧頂*/
{
if(S-top==S-max)?{
printf("Stack?is?full!?\n");
return?-1;
}
S-elem[S-top++]?=?item;?//壓棧,棧頂加1
return?0;
}
int?StackEmpty(Stack?S)
{
return?(!S.top)?1:0;?/*判斷棧是否為空*/
}
int?Pop(Stack?*S)?/*棧頂元素出棧*/
{
if(!S-top)?{
printf("Pop?an?empty?stack!\n");
return?-1;
}
return?S-elem[--S-top]??;?//彈出棧,棧頂減1
}
void?MultibaseOutput(long?n,int?B)
{
int?m;?Stack?S;
if(InitStack(S,MAXSIZE)){
printf("Failure!\n");
return;
}
do?{
if?(Push(S,B?))?//------
{
printf("Failure!\n");
return;
}
n=?n-1?;?//--------
}while(n!=0);
while(!StackEmpty(S))?{?/*輸出B進制的數(shù)*/
m=Pop(S);
if(m10)?printf("%d",m);?/*小于10,輸出數(shù)字*/
else?printf("%c",?m+55);?/*大于或等于10,輸出相應(yīng)的字符*/
}
printf("\n");
}
#includestdio.h
#include?string.h
#define?byte?unsigned?char
byte?queue_buf[20],?idx?=?0;
void?push(byte?n)
{
if?(idx??20)
queue_buf[idx++]?=?n;
}
byte?pop()
{
byte?ret?=?0;
if?(idx--??0)
{
ret?=?queue_buf[0];
memcpy(queue_buf,?queue_buf[1],?idx);
}
return?ret;
}
byte?size()
{
return?idx;
}
int?main()
{
int?len;
for?(int?i?=?1;?i?=?20;?i++)
push(i);
printf("size?=?%d\n",?len?=?size());
for?(int?i?=?1;?i?=?len;?i++)
printf("%d?",?pop());
printf("\n");
return?0;
}
這個算是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容講解的是一個叫做棧類型的數(shù)據(jù)結(jié)構(gòu),這個數(shù)據(jù)結(jié)構(gòu)的特點就是后進先出--最后放進去的數(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 退出。