对栈的操作

之前对栈的认识仅仅是“先入后出”,不过最近看了视频教程后对栈有了更深刻的认识了。下面是对栈操作的代码:

#include<iostream>
#include<malloc.h>

using namespace std;

//定义结点元素
typedef struct Node
{
int data;
struct Node *pNext;
}NODE , *PNODE;

//定义栈的栈顶和栈底
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK,* PSTACK;

//初始化栈
void init_Stack(PSTACK pS)
{
pS->pTop=(PNODE)malloc(sizeof(NODE));
if(pS->pTop == NULL)
{
cout<<"初始化栈时,内存分配失败!"<<endl;
exit(-1);
}

pS->pBottom=pS->pTop;
pS->pTop->pNext=NULL;

}
//往栈中压入val元素
void push_Stack(PSTACK pS,int val)
{
PNODE p1;
p1=(PNODE)malloc(sizeof(NODE));
if(p1 == NULL)
{
cout<<"压栈时,内存分配失败!"<<endl;
exit(-1);
}
p1->data=val;
p1->pNext=pS->pTop;
pS->pTop=p1;

return ;
}
//判断栈是否为空
int is_emptys(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
return 1;
else
return 0;
}
//遍历栈,进行输出
void traverse_Stack(PSTACK pS)
{
if(is_emptys(pS))
{
cout<<"输入的栈为空,无法遍历!"<<endl;
return;
}

PNODE p1=pS->pTop;
while(p1!=pS->pBottom)
{
cout<<p1->data<<" ";
p1=p1->pNext;
}

cout<<endl;
}
//出栈,*val为出栈的元素
void pop_Stack(PSTACK pS,int * val)
{
if(is_emptys(pS))
{
cout<<"输入的栈为空,无法出栈!"<<endl;
return;
}

PNODE p1=pS->pTop;
* val=p1->data;
pS->pTop=pS->pTop->pNext;
free(p1);
p1=NULL;
}

//清空栈,注意防止内存泄露
void clear_Stack(PSTACK pS)
{
if(is_emptys(pS))
{
cout<<"输入的栈为空,无法清空!"<<endl;
return;
}

PNODE p1=pS->pTop;
PNODE p2=NULL;

while(p1!=pS->pBottom)
{
p2=p1->pNext;
free(p1);
p1=p2;
}

pS->pTop=pS->pBottom;
cout<<"清除内存成功!"<<endl;
}


//主函数
int main()
{
STACK s;
int v;
init_Stack(&s);
push_Stack(&s,1);
push_Stack(&s,2);
push_Stack(&s,3);
push_Stack(&s,4);
push_Stack(&s,5);
traverse_Stack(&s);
pop_Stack(&s,&v);//5
traverse_Stack(&s);
cout<<"v="<<v<<endl;

clear_Stack(&s);
traverse_Stack(&s);
return 0;

}

 

 

 

posted on 2014-04-22 16:04  fx-sg  阅读(315)  评论(0编辑  收藏  举报

导航