您的位置:首页 > 其它

链栈的基本操作

2018-03-23 16:20 531 查看
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int dataType;

typedef struct Node{
struct Node *next;
dataType data;
}LSNode;
typedef LSNode *pLStack;  //定义栈顶指针

//初始化链栈
pLStack InitLStack()
{
pLStack pls=NULL;  //将栈顶指针置空
return pls;
}

//入栈
void PushLStack(pLStack *pls,dataType value)  //传入栈顶指针的地址,将栈顶指针指向新元素
{
Node *p=(LSNode*)malloc(sizeof(LSNode));  //申请一个结点,并更新其数据域和指针域
p->data=value;
p->next=*pls;
*pls=p;  //更新栈顶指针
}

//创建链栈(不需要头结点,栈顶指针直接指向第一个结点)
pLStack CreateLStack_1_9_Order()
{
pLStack pls=InitLStack();
int i=1,num=9;
while (i<=num)
{
cout<<i<<" ";
PushLStack(&pls,i);
i++;
}
cout<<endl;
return pls;
}

//出栈
void PopLStack(pLStack *pls)
{
if (*pls==NULL)
{
cout<<"Empty"<<endl;
return;
}
cout<<(*pls)->data<<endl;
LSNode *temp=*pls;  //释放该结点
*pls=(*pls)->next;
free(temp);
}

//全部出栈
void AllPopLStack(pLStack *pls)
{
while (*pls!=NULL)
{
PopLStack(pls);
}
cout<<"Empty"<<endl;
}

//释放链栈
void FreeLStack(pLStack *pls)
{
while (*pls!=NULL)
{
LSNode *temp=*pls;
*pls=(*pls)->next;
free(temp);
}
}

//将十进制转化为x进制
void Change(int n,int x)
{
pLStack pls=InitLStack();
while (n)
{
PushLStack(&pls,n%x);
n=n/x;
}
while (pls!=NULL)
{
PopLStack(&pls);
}
}

void main()
{
//pLStack pls=CreateLStack_1_9_Order();
//AllPopLStack(&pls);

Change(8,2);

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: