您的位置:首页 > 编程语言 > C语言/C++

链式栈C++实现

2016-03-11 16:24 344 查看
<span style="font-size:18px;">#include <iostream>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

using namespace std;
typedef struct Node{
int data;
struct Node *pNext;
}NODE,*PNODE;

typedef struct Stack{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
//函数声明
void initStack(PSTACK);
void push(PSTACK,int);
void traverse(PSTACK);
bool pop(PSTACK,int *);
void clearStack(PSTACK);
bool empt(PSTACK);
int main(){
STACK s;//STACK等价于struct Stack
initStack(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
push(&s,5);
push(&s,6);

int val;
traverse(&s);
//出栈
bool b = pop(&s,&val);
if(b){
//遍历输出
printf("出栈成功,出栈元素=");
printf("%d\n",val);
traverse(&s);
}else{
printf("出栈失败\n");
}
clearStack(&s);
printf("清空栈\n");
traverse(&s);
printf("进栈\n");
push(&s,1);
push(&s,2);
push(&s,3);
traverse(&s);
return 0;
}
//将栈清空
void clearStack(PSTACK pStack){
if(empt(pStack)){
return ;
}else{
while(pStack->pBottom!=pStack->pTop){
PNODE p = pStack->pTop;
pStack->pTop =p->pNext;
free(p);
p=NULL;

}

}
}
//用来判断栈是否为空
bool empt(PSTACK pStack){
if(pStack->pTop==pStack->pBottom){
return true;
}else{
return false;
}
}
//用来弹栈,这个val将出栈的元素保存
bool pop(PSTACK pStack,int * val){
if(empt(pStack)){
return false;
}else{
PNODE p = pStack->pTop;
pStack->pTop=p->pNext;
*val =p->data;
free(p);
p=NULL;
return true;
}
}
//用来遍历栈
void traverse(PSTACK pStack){
PNODE p = pStack->pTop;
while(p!=pStack->pBottom){
printf("%d\n",p->data);
p=p->pNext;
}
}
//用来压栈
void push(PSTACK pStack,int value){
PNODE p = (PNODE)malloc(sizeof(NODE));
if(NULL==p){
printf("压栈失败\n");
exit(-1);
}else{
p->data=value;
p->pNext=pStack->pTop;//pStack->pTop不能随便改成pStack->pBottom
pStack->pTop=p;
}
}
//用来初始化栈
void initStack(PSTACK pStack){
PNODE p = (PNODE)malloc(sizeof(NODE));
if(NULL==p){
printf("动态内存分配失败\n");
exit(-1);
}else{
pStack->pBottom=p;
pStack->pTop=p;
pStack->pTop->pNext=NULL;
}

}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: