一个栈的链表实现的问题。
时间:2011-12-04
来源:互联网
#include<stdlib.h>
#include<iostream.h>
struct stack
{
int data;
struct stack * next;
};
int main()
{
bool empty(stack *);
void push(int,stack *);
stack * pop(stack *);
int n;
stack T;
stack * R=&T;
R->next=NULL;
stack * G;
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n"
<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
return 0;
}
void push(int x,stack * S)
{
while(S->next!=NULL)
S=S->next;
stack * q=(stack *)malloc(sizeof(stack));
q->data=x;
q->next=NULL;
S->next=q;
}
bool empty(stack * S)
{
if(S->next)
return false;
else
return true;
}
//1 与2效果等同
stack * pop(stack * S)
{
if(empty(S))
{
cerr<<"the stack is empty!\n";
exit(0);
}
stack * q;
while(S->next!=NULL)
{
q=S;
S=S->next;
}
q->next=NULL;
return S;
}
//2
/*stack * pop(stack * S)
{
stack * q;
stack * K=S;
stack * T;
while(S->next!=NULL)
{
q=S;
S=S->next;
}
T=S;
q->next=NULL;
S=K;
return T;
}*/
我感觉1是不对的,2才是对的,但是它又是对的,为什么?
#include<iostream.h>
struct stack
{
int data;
struct stack * next;
};
int main()
{
bool empty(stack *);
void push(int,stack *);
stack * pop(stack *);
int n;
stack T;
stack * R=&T;
R->next=NULL;
stack * G;
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n"
<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"please input data:\n";
cin>>n;
push(n,R);
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
cout<<"pop stack:\n";
G=pop(R);
cout<<G->data<<"\n";
return 0;
}
void push(int x,stack * S)
{
while(S->next!=NULL)
S=S->next;
stack * q=(stack *)malloc(sizeof(stack));
q->data=x;
q->next=NULL;
S->next=q;
}
bool empty(stack * S)
{
if(S->next)
return false;
else
return true;
}
//1 与2效果等同
stack * pop(stack * S)
{
if(empty(S))
{
cerr<<"the stack is empty!\n";
exit(0);
}
stack * q;
while(S->next!=NULL)
{
q=S;
S=S->next;
}
q->next=NULL;
return S;
}
//2
/*stack * pop(stack * S)
{
stack * q;
stack * K=S;
stack * T;
while(S->next!=NULL)
{
q=S;
S=S->next;
}
T=S;
q->next=NULL;
S=K;
return T;
}*/
我感觉1是不对的,2才是对的,但是它又是对的,为什么?
作者: zhyshzh 发布时间: 2011-12-04
栈是只能从一端插入和删除的,你要明白并把握与线性表的不同
作者: yaoxinchao 发布时间: 2011-12-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28