顺序栈、链队列的实现,十进制转换为二进制

1.顺序栈的实现

源代码:

#include

const int StackSize=12;                                                           //栈最多有12个元素
template                                      
class SeqStack{                                                                       //定义模板类SeqStack
public:
SeqStack();                                                                     //构造函数,栈的初始化
~SeqStack(){}                                                                 //析构函数
void Push(DateType x);                                                 //将元素x入栈
DateType Pop();                                                            //将栈顶元素弹出
DateType GetTop();                                                      //取栈顶元素(并不删除)
int Empty();                                                                   //判断栈是否为空            
private:
DateType data[StackSize];                                           //存放栈元素的数组
int top;                                                                         //栈顶指针,指示栈顶元素在数组中的下标
};


template
SeqStack::SeqStack()
{
top=-1;
}


template
void SeqStack::Push(DateType x)
{
if(top==StackSize-1)throw"上溢";
top++;
data[top]=x;
}


template
DateType SeqStack::Pop()
{
DateType x;
if(top==-1)throw"下溢";
x=data[top--];
return x;
}


template
DateType SeqStack::GetTop()
{
if(top!=1)
return data[top];
}


template
int SeqStack::Empty()
{
if(top==-1)
return 1;
else
return 0;
}


void main()
{
SeqStackS;                                                            //创建模板类的实例
if(S.Empty())
cout<<"栈为空"< else
cout<<"栈非空"< cout<<"对18和12执行入栈操作"< S.Push(18);
S.Push(12);
cout<<"栈顶元素为"< cout< cout<<"执行一次出栈操作"< S.Pop();                                                                         //执行出栈操作
cout<<"栈顶元素为"< cout<

}

运行结果:

顺序栈、链队列的实现,十进制转换为二进制_第1张图片


2.链队列的实现

源代码:

#include
template
struct Node                                                                          //以下定义链队列的结点
{
DateType data;
Node * next;
}; 


template                                      
class LinkQueue{                                                                 //定义模板类LinkQueue
public:
         LinkQueue();                                                              //构造函数,初始化一个空的链队列
        ~LinkQueue();                                                            //析构函数,释放链队列中各结点的存储空间
        void EnQueue(DateType x);                                       //将元素x入队
DateType DeQueue();                                                //将队头元素出队
DateType GetQueue();                                               //取链队列的队头元素
int Empty();                                                                //判断链队列是否为空            
private:
Node * front,*rear;                                //队头和队尾指针                  
};


template
LinkQueue::LinkQueue()
{
Node * s=NULL;
s=new Node;
s->next=NULL;
front=rear=s;
}


template
LinkQueue::~LinkQueue()
{
Node * p=NULL;
while(front!=NULL)
{
p=front->next;
delete front;
front=p;
}
}


template
void LinkQueue::EnQueue(DateType x)
{
Node * s=NULL;
s=new Node;
s->data=x;                                                              //申请一个数据域为x的结点s
s->next=NULL;
rear->next=s;rear=s;                                              //将结点s插入到队尾
}


template
DateType LinkQueue::DeQueue()
{
Node * p=NULL;
int x;
if(rear==front)throw"下溢";
p=front->next;
x=p->data;                                                           //暂存队头元素
front->next=p->next;                                          //将队头元素所在结点摘链
if(p->next==NULL)rear=front;                            //判断出队前队列长度是否为1
delete p;
return x;
}


template
DateType LinkQueue::GetQueue()
{
if(front!=rear)
return front->next->data;
}


template
int LinkQueue::Empty()
{
if(front==rear)
return 1;
else
return 0;
}


void main()
{
LinkQueueQ;                                            
if(Q.Empty())
cout<<"队列为空"< else
cout<<"队列非空"< cout<<"对18和20执行入队操作:"< try
{
Q.EnQueue(18);                                                  //入队操作 
Q.EnQueue(20);
}
catch(char* wrong)
{
          cout< }
cout<<"查看队头元素:"< cout< cout<<"执行出队操作"<       try
{
Q.DeQueue();
}
catch(char* wrong)
{
cout< }
cout<<"查看队头元素:"< cout<

}

运行结果:

顺序栈、链队列的实现,十进制转换为二进制_第2张图片


3.将一个十进制的数转换为二进制

源代码:

#include
int main()
{
int x=25,a[10],i,n=0;                                                    
        cout<<"请将变量x由十进制转换为二进制。"<        cout<<"十进制  x="< cout<<"转换后,二进制  x=";
for(i=0;x!=0;i++,n++)
{
a[i]=x%2;                                                              
x/=2;
}
for(i=n-1;i>=0;i--)
{
cout< }
cout< return 0;

}

运行结果:


你可能感兴趣的:(数据结构)