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

1.顺序栈的实现

源代码:

#include<iostream.h>

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


template <class DateType>
SeqStack<DateType>::SeqStack()
{
top=-1;
}


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


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


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


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


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

}

运行结果:



2.链队列的实现

源代码:

#include<iostream.h>
template <class DateType>
struct Node                                                                          //以下定义链队列的结点
{
DateType data;
Node<DateType> * next;
}; 


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


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


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


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


template <class DateType>
DateType LinkQueue<DateType>::DeQueue()
{
Node<DateType> * 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 <class DateType>
DateType LinkQueue<DateType>::GetQueue()
{
if(front!=rear)
return front->next->data;
}


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


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

}

运行结果:



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

源代码:

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

}

运行结果:


猜你喜欢

转载自blog.csdn.net/z_jh1213/article/details/80188570
今日推荐