栈:
- 结构描述
- 初始化
- 压栈
- 出栈
下面是具体实现:
1.结构描述:
typedef struct Node//构造结点
{
int data;
struct Node *pNext;
}NODE,*PNODE;
typedef struct Stack//构造栈的元素
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
2, 初始化:
void init(PSTACK pz)
{
pz->pTop =(PNODE)malloc(sizeof(NODE));
if(pz->pTop==NULL)
{
cout<<"动态内存分配失败!\n"<<endl;
exit(-1);
}
else
{
pz->pBottom =pz->pTop;
pz->pTop ->pNext =NULL;
}
}
3.压栈:
void push(PSTACK pz,int val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->data =val;
pNew->pNext =pz->pTop ;
pz->pTop =pNew;
}
4.出栈:
bool pop(PSTACK pz,int *pval)
{
if(empt(pz))
return false;
else
{
PNODE out=pz->pTop;
*pval=out->data ;
pz->pTop =out->pNext ;
free(out);
out=NULL;
return true;
}
}
------》源代码:
#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;
//1.结构描述:
typedef struct Node//构造结点
{
int data;
struct Node *pNext;
}NODE,*PNODE;
typedef struct Stack//构造栈的元素
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
//2.初始化:
void init(PSTACK pz)
{
pz->pTop =(PNODE)malloc(sizeof(NODE));
if(pz->pTop==NULL)
{
cout<<"动态内存分配失败!\n"<<endl;
exit(-1);
}
else
{
pz->pBottom =pz->pTop;
pz->pTop ->pNext =NULL;
}
}
//3.压栈:
void push(PSTACK pz,int val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->data =val;
pNew->pNext =pz->pTop ;
pz->pTop =pNew;
}
//遍历:
void traverse (PSTACK pz)
{
PNODE p=pz->pTop ;
while(p!=pz->pBottom )
{
cout<<p->data<<'\t';
p=p->pNext ;
}
cout<<endl;
return ;
}
//判空:
bool empt(PSTACK pz)
{
if(pz->pTop==pz->pBottom )
return true;
else
return false;
}
//4.出栈:
bool pop(PSTACK pz,int *pval)
{
if(empt(pz))
return false;
else
{
PNODE out=pz->pTop;
*pval=out->data ;
pz->pTop =out->pNext ;
free(out);
out=NULL;
return true;
}
}
//清栈:
void clear(PSTACK pz,PNODE q)
{
if(empt(pz))
{
cout<<"clear!" ;
return;
}
else
{
PNODE p=pz->pTop;
PNODE q=NULL;
while(p!=pz->pBottom )
{
q=p->pNext ;
free(p);
p=q;
}
cout<<"clear!"<<endl;
}
pz->pTop =pz->pBottom ;
}
int main()
{
STACK s;
PNODE w=NULL;
int val;
init(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
push(&s,5);
push(&s,6);
traverse(&s);
if(pop(&s,&val))
{
cout<<"出栈成功,出栈的元素是"<<val<<'\t';
cout<<endl;
}
else
cout<<"出栈失败!"<<endl;;
traverse(&s);
clear(&s,w);
traverse(&s);
return 0;
}
凡是满足只能在一端进行插入、删除操作的数据结构类型,并且是后入先出的,我们都可以称它为栈。栈是数据结构最基本的应用,有很多算法的实现是依托于栈来执行的。