先感叹下,前哨结点真的方便!不知是哪位前辈完美的想法
本代码完成了:
- Pop
- Push
- Initstack(创建前哨结点)
- Create(快速将元素压入栈)
注意:链栈无full的说法
代码要求你自己输入元素压栈,然后输出他们。每个人运行结果不一样,这里不贴运行结果,自己run吧。
这个代码有点像数组reverse的操作,并且还极其方便。
#include<iostream>
typedef int ElementType ;
using namespace std;
typedef struct Snode* Stack;
void Push( Stack ptrs, ElementType x );
//注意程序运行会要求你手动输入压入栈的元素
struct Snode {
ElementType data;
Stack next;
};
Stack Create( Stack ptrs )
{
while(1){
ElementType x;
cin>>x;
if( x==9999 )
break;
Push( ptrs, x );
}
}
Stack Initstack()
{
Stack head;
head = (Stack)malloc( sizeof( struct Snode ) );//头指针及哨位结点的定义
head->next = NULL;
return head;
}
bool Isempty( Stack ptrs )
{
return (ptrs->next == NULL);
}
void Push( Stack ptrs, ElementType x )
{
Stack p;
p = (Stack)malloc( sizeof( struct Snode ) );
p->next = ptrs->next;
ptrs->next = p;
p->data = x;
}
ElementType Pop( Stack ptrs )
{
if( Isempty( ptrs ) ){
cout<<"堆栈空"<<endl;
return NULL;
}else{
Stack p;
p = ptrs->next;
ptrs->next = p->next;
ElementType x = p->data;
free(p);
return x;
}
}
void print( Stack ptrs)
{
Stack p = ptrs->next;
while( p )
{
cout<<p->data<<endl;
p = p->next;
}
}
int main()
{
Stack ptrs;
ptrs = Initstack();
Create( ptrs );
print( ptrs );
return 0;
}