链式栈实现数制转换

#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;
 }

链式栈是栈的链接存储表示。使用单链表作为它的存储表示。它使用一个链表的头指针来表示一个栈,对于需要同时使用多个栈的情形,只要声明一个链表指针向量,就能同时定义和使用多个链式栈,并且无需在运算时做存储空间额移动。

posted @ 2014-08-22 01:22  yyou  阅读(1600)  评论(0)    收藏  举报