您的位置:首页 > 其它

2.1链式栈

2015-09-25 17:11 363 查看
#include<iostream>
using namespace std;
//结点结构
typedef struct node
{
int data;
struct node *next;
}StackNode,*PStackNode;
//栈
typedef struct
{
PStackNode top;
}LinkStack,*PLinkStack;

//初始化栈
PLinkStack Init_LinkStack(void)
{
PLinkStack S;
S=(PLinkStack)malloc(sizeof(LinkStack));
if(S)
{
S->top=NULL;
}
return S;
}

//判断栈空(是否有元素)
int Empty_LinkStack(PLinkStack S)
{
return (S->top==NULL);
}

//入栈(在栈顶插入元素)
int Push_LinkStack(PLinkStack S,int x)
{
PStackNode p;
p=(PStackNode)malloc(sizeof(StackNode));
if(!p)
{
cout<<"内存溢出";
return 0;
}
p->data=x;
p->next=S->top;
S->top=p;
return 1;

}

//出栈(删除顶部元素)
int Pop_LinkStack(PLinkStack S,int *x)
{
PStackNode p;
if(Empty_LinkStack(S))
{
cout<<"栈空,不能出栈";
return 0;
}
*x=S->top->data;
p=S->top;
S->top=S->top->next;
free(p);
return 1;
}

//取栈顶元素(不删除)
int GetTop_LinkStack(PLinkStack S,int *x)
{
if(Empty_LinkStack(S))
{
cout<<"栈空";
return 0;
}
*x=S->top->data;
return 1;
}

//销毁栈
void Destroy_LinkStack(PLinkStack *LS)
{
PStackNode p,q;
if(*LS)
{
p=(*LS)->top;
while(p)
{
q=p;
p=p->next;
free(q);
}
free(*LS);
}
*LS=NULL;
return ;
}

int main()
{
PLinkStack S;
S=Init_LinkStack();
Destroy_LinkStack(&S);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: