日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈清空程序演示

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈清空程序演示 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //棧頂元素PNODE pBottom; //棧底部元素 }STACK,*PSTACK;void init(PSTACK); void push(PSTACK, int); void traverse(PSTACK);bool pop(PSTACK, int *p); bool empty(PSTACK ps); //判空void clear(PSTACK ps); //清空int main(void){STACK s; //等價(jià)于struct Stackinit(&s); //初始化push(&s,1); //壓棧 push(&s, 2);push(&s, 3);push(&s, 4);push(&s, 5);push(&s, 6);push(&s, 7);traverse(&s); //遍歷輸出//清空棧clear(&s);traverse(&s); //遍歷輸出int val; //保存出棧的元素//出棧一個(gè)元素if (pop(&s, &val)) {printf("出棧成功,出棧的元素是%d\n", val);}else {printf("出棧失敗,出棧的元素是%d\n", val);}traverse(&s); //遍歷輸出while (true){ }return 0; }//初始化造出一個(gè)空棧 void init(PSTACK ps) {ps->pTop = (PNODE)malloc(sizeof(NODE));if (NULL == ps->pTop) {printf("動(dòng)態(tài)內(nèi)存失敗");exit(-1);}else {ps->pBottom= ps->pTop;ps->pTop->pNext = NULL;} }//壓棧 void push(PSTACK ps, int val) {//構(gòu)造一個(gè)新的節(jié)點(diǎn)PNODE pNew=(PNODE)malloc(sizeof(NODE));pNew->data = val;pNew->pNext = ps->pTop;ps->pTop = pNew; }//遍歷 void traverse(PSTACK ps) {PNODE p = ps->pTop;while (p != ps->pBottom) {printf("%d ",p->data);p = p->pNext;}printf("\n");return; }//把ps所指向的棧出棧一次,并把出棧的元素存入pVal形參所指向的變量中,如果出棧失敗,返回false,否則返回true bool pop(PSTACK ps, int *pVal) {//如果為空返回falseif (empty(ps)) {return false;}else {PNODE tmp = ps->pTop; //構(gòu)造一個(gè)臨時(shí)節(jié)點(diǎn),存放ps指向頂部元素的地址(頂部元素是要出棧的)*pVal = tmp->data; //出棧的元素ps->pTop=tmp->pNext;free(tmp);tmp = NULL;return true;}}bool empty(PSTACK ps) {if (ps->pTop == ps->pBottom) {return true;}else {return false;} }void clear(PSTACK ps) {if (empty(ps)) {return;}else {//構(gòu)造一個(gè)臨時(shí)節(jié)點(diǎn)指針p存放棧頂節(jié)點(diǎn)的地址PNODE p = ps->pTop;PNODE q = NULL; //構(gòu)造一個(gè)臨時(shí)節(jié)點(diǎn)指針q 將q指針的地址置空while (p != ps->pBottom) { //p != ps->pBottom 表示這不是一個(gè)空棧 然后就循環(huán)q = p->pNext; //將棧頂元素下一個(gè)元素的地址給qfree(p); //把棧頂元素p釋放p = q; //把q又賦值給p此時(shí) p就指向了棧頂?shù)南乱粋€(gè)元素,由于棧頂元素被釋放,此時(shí)p又是棧頂元素}ps->pTop = ps->pBottom;}}

?

總結(jié)

以上是生活随笔為你收集整理的栈清空程序演示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。