栈的基本操作有哪些,包括创建、入栈、出栈、清空和遍历等?
- 内容介绍
- 文章标签
- 相关推荐
本文共计368个文字,预计阅读时间需要2分钟。
当然可以,请您提供需要改写的伪原创开头内容,我会根据您的要求进行改写。
#include#include#includetypedefstructNode{intdata;structNode*pNext;}NODE,*PNODE #include#include#includetypedef struct Node{int data;struct Node *pNext;}NODE,*PNODE;typedef struct Stack{PNODE pTop;PNODE pBottom;}STACK,*PSTACK;void init(PSTACK pS);void push (PSTACK pS,int val);void traverse(PSTACK pS);bool pop(PSTACK pS,int * pVal);bool empty(PSTACK pS);void clear(PSTACK pS);int main(){ STACK S;int val;init(//造出一个空栈for(int i=0;i<=15;i++){ push(}/*push(//压栈push(push(push( push(push(*/ traverse(//遍历输出//出栈//pop(if(pop(}else{ printf("出栈成功");} traverse(//遍历输出//traverse(//遍历输出 clear(//清空 if(empty(}else{ printf("栈为非空\n");}return 0;}void init(PSTACK pS){pS->pTop=(PNODE)malloc(sizeof(NODE));if(NULL==pS->pTop){printf("动态内存分配失败");exit(-1);}else{pS->pBottom = pS->pTop;pS->pTop->pNext = NULL;}}void push (PSTACK pS,int val){PNODE pNew=(PNODE)malloc(sizeof(NODE));pNew->data=val;pNew->pNext=pS->pTop;pS->pTop=pNew;return;}void traverse(PSTACK pS){PNODE p=pS->pTop;while(p!=pS->pBottom){printf("%d ",p->data);p=p->pNext;}printf("\n");}bool empty(PSTACK pS){if(pS->pTop==pS->pBottom){return true;}else{return false;}}bool pop(PSTACK pS,int * pVal){if(empty(pS))//pS存放的就是栈的地址{return true;}else{ PNODE r = pS->pTop;* pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;return true;}}void clear(PSTACK pS){if(empty(pS)){return;}else{PNODE p=pS->pTop;PNODE q=NULL;while(p!=pS->pBottom){q=p->pNext;free(p);p=q;}pS->pTop=pS->pBottom;}}版权声明:本文为博主原创文章,未经博主允许不得转载。
栈的操作(创建,入栈,出栈,清空,遍历等等)
本文共计368个文字,预计阅读时间需要2分钟。
当然可以,请您提供需要改写的伪原创开头内容,我会根据您的要求进行改写。
#include#include#includetypedefstructNode{intdata;structNode*pNext;}NODE,*PNODE #include#include#includetypedef struct Node{int data;struct Node *pNext;}NODE,*PNODE;typedef struct Stack{PNODE pTop;PNODE pBottom;}STACK,*PSTACK;void init(PSTACK pS);void push (PSTACK pS,int val);void traverse(PSTACK pS);bool pop(PSTACK pS,int * pVal);bool empty(PSTACK pS);void clear(PSTACK pS);int main(){ STACK S;int val;init(//造出一个空栈for(int i=0;i<=15;i++){ push(}/*push(//压栈push(push(push( push(push(*/ traverse(//遍历输出//出栈//pop(if(pop(}else{ printf("出栈成功");} traverse(//遍历输出//traverse(//遍历输出 clear(//清空 if(empty(}else{ printf("栈为非空\n");}return 0;}void init(PSTACK pS){pS->pTop=(PNODE)malloc(sizeof(NODE));if(NULL==pS->pTop){printf("动态内存分配失败");exit(-1);}else{pS->pBottom = pS->pTop;pS->pTop->pNext = NULL;}}void push (PSTACK pS,int val){PNODE pNew=(PNODE)malloc(sizeof(NODE));pNew->data=val;pNew->pNext=pS->pTop;pS->pTop=pNew;return;}void traverse(PSTACK pS){PNODE p=pS->pTop;while(p!=pS->pBottom){printf("%d ",p->data);p=p->pNext;}printf("\n");}bool empty(PSTACK pS){if(pS->pTop==pS->pBottom){return true;}else{return false;}}bool pop(PSTACK pS,int * pVal){if(empty(pS))//pS存放的就是栈的地址{return true;}else{ PNODE r = pS->pTop;* pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;return true;}}void clear(PSTACK pS){if(empty(pS)){return;}else{PNODE p=pS->pTop;PNODE q=NULL;while(p!=pS->pBottom){q=p->pNext;free(p);p=q;}pS->pTop=pS->pBottom;}}版权声明:本文为博主原创文章,未经博主允许不得转载。
栈的操作(创建,入栈,出栈,清空,遍历等等)

