您的位置:首页 > 其它

链栈的相关操作

2012-07-24 23:20 330 查看
/*链栈不需要设置头结点*/
#include<iostream>
typedef struct StackNode
{
char data;
struct StackNode *next;
}StackNode, *LinkStack;

/*取栈顶元素, 只取元素,栈顶指针不变*/
int GetTop(LinkStack *top, char *e)
{
if(*top == NULL)   //判断栈空
return -1;

*e = (*top)->data;
return 0;
}

/*入栈操作*/
int Push(LinkStack *top, char e)
{
LinkStack p;
p = new StackNode;
p->data = e;
p->next = *top;
*top = p;

return 0;
}

/*出栈操作*/
int Pop(LinkStack *top, char *e)
{
LinkStack p;
if(*top == NULL)   //判断栈空
return -1;

*e = (*top)->data;
p = *top;
*top = (*top)->next;
delete p;
return 0;
}
/*清空链栈*/
void ClearLinkStack(LinkStack *top)
{
LinkStack p;

while(*top)
{
p = *top;
*top = (*top)->next;
delete p;
}
}

int main()
{
LinkStack S = NULL;  //初始化链栈S,不设头结点,S为头指针
char e;

Push(&S, 'U');
Push(&S, ' ');
Push(&S, 'e');
Push(&S, 'v');
Push(&S, 'o');
Push(&S, 'L');
Push(&S, ' ');
Push(&S, 'I');

LinkStack p = S;
while(p)   //遍历链栈,从栈顶至栈底输出
{
std::cout<<p->data;
p = p->next;
}
GetTop(&S, &e);
std::cout<<e;

for(int i=0; i<8; i++)
{
Pop(&S, &e);
std::cout<<e;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null struct