链栈的基本操作
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"); }