// DataStructTest.cpp : Defines the entry point for the console application.
//
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct node
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int data;
struct node * next;
}LStackTp;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//初始化.书上的算法没有考虑到释放栈的空间
void InitStack(LStackTp ** ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * next=NULL;
while((*ls)!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
next=(*ls)->next;
free((*ls));
(*ls)=next;
}
}
//入栈
int Push(LStackTp ** ls,int value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=(LStackTp *)malloc(sizeof(node));
p->next=(*ls);
p->data=value;
(*ls)=p;
return 1;
}
//出栈
int Pop(LStackTp ** ls,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=NULL;
if ((*ls)==NULL)
return 0;
value=(*ls)->data;
p=(*ls)->next;
free((*ls));
(*ls)=p;
return 1;
}
//判断是否为空栈
int EmptyStack(LStackTp * ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (ls==NULL)
return 1;
else
return 0;
}
//取顶元素
int GetTop(LStackTp * ls,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (ls==NULL)
return 0;
value=ls->data;
return 1;
}
//显示
void Display(LStackTp * ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=ls;
while(p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cout<<"栈中元素:"<<p->data<<endl;
p=p->next;
}
}
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * ls=NULL;
InitStack(&ls);
//
cout<<"分别入栈6,5,4,3,2,1"<<endl;
Push(&ls,6);
Push(&ls,5);
Push(&ls,4);
Push(&ls,3);
Push(&ls,2);
Push(&ls,1);
Display(ls);
//
int value=0;
Pop(&ls,value);
cout<<"退栈操作得到的结果为:"<<value<<endl;
Display(ls);
//
GetTop(ls,value);
cout<<"得到栈顶原素为:"<<value<<endl;
//
InitStack(&ls);
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//--------------------------------------------参数上使用指针的引用形式,不使用二级指针---------------------------------------------------
// DataStructTest.cpp : Defines the entry point for the console application.
//
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct node
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int data;
struct node * next;
}LStackTp;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef node * lpnode;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//初始化.书上的算法没有考虑到释放栈的空间,参数上表明的是对指针类型的引用
void InitStack(LStackTp * & ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * next=NULL;
while(ls!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
next=ls->next;
free(ls);
ls=next;
}
}
//入栈
int Push(LStackTp * & ls,int value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=(LStackTp *)malloc(sizeof(node));
p->next=ls;
p->data=value;
ls=p;
return 1;
}
//出栈
int Pop(LStackTp * & ls,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=NULL;
if (ls==NULL)
return 0;
value=ls->data;
p=ls->next;
free(ls);
ls=p;
return 1;
}
//判断是否为空栈
int EmptyStack(LStackTp * ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (ls==NULL)
return 1;
else
return 0;
}
//取顶元素
int GetTop(LStackTp * ls,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (ls==NULL)
return 0;
value=ls->data;
return 1;
}
//显示
void Display(LStackTp * ls)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * p=ls;
while(p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cout<<"栈中元素:"<<p->data<<endl;
p=p->next;
}
}
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LStackTp * ls=NULL;
InitStack(ls);
//
cout<<"分别入栈6,5,4,3,2,1"<<endl;
Push(ls,6);
Push(ls,5);
Push(ls,4);
Push(ls,3);
Push(ls,2);
Push(ls,1);
Display(ls);
//
int value=0;
Pop(ls,value);
cout<<"退栈操作得到的结果为:"<<value<<endl;
Display(ls);
//
GetTop(ls,value);
cout<<"得到栈顶原素为:"<<value<<endl;
//
InitStack(ls);
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。