链式栈实现数制转换
#include<stdlib.h> #include<iostream> using namespace std; typedef int SElemType; typedef struct node //链式栈定义 { SElemType data; struct node* link; }LinkNode,* LinkStack; int Pop(LinkStack& S,SElemType& x) //退栈 { if(S->link==NULL) return 0; LinkNode* p=S->link; S->link=p->link; x=p->data; delete p; return 1; }; void Push(LinkStack& S,SElemType x) //进栈 { LinkNode* p=new LinkNode; if(!p) { cerr<<"存储分配失败!\n";exit(1); } p->data=x; p->link=S->link;S->link=p; }; void InitStack(LinkStack& S) //链式栈初始化 { S=new LinkNode; if(!S) { cerr<<"存储分配失败!\n";exit(1); } S->link=NULL; }; int StackEmpty(LinkStack& S) //链式栈是否为空 { return S->link==NULL; }; int main() { //辗转除k取余法将十进制转为k进制 int N,k,d; cout<<"请输入一个非负整数";cin>>N; cout<<"要转换多少进制数?2,8,16:" ; cin>>k; LinkStack S;InitStack(S); while(N>0) { Push(S,N% k); N=N/k; } while(!StackEmpty(S)) { Pop(S,d);cout<<d; } cout<<endl; return 0; }
链式栈是栈的链接存储表示。使用单链表作为它的存储表示。它使用一个链表的头指针来表示一个栈,对于需要同时使用多个栈的情形,只要声明一个链表指针向量,就能同时定义和使用多个链式栈,并且无需在运算时做存储空间额移动。

浙公网安备 33010602011771号