信管117229谢胜祥数据结构试验二

顺序栈:

头文件

#ifndef SEQSTACK_H

#define SEQSTACK_H

constint stacksize=10;

class seqstack

{

private:

       int data[stacksize];

       int top;

public:

       seqstack();

       ~seqstack(){}

       void push(int x);

    int pop();

       int gettop();

       int empty();

};

#endif

 子函数

#include"seqstack.h"

seqstack::seqstack()

{

top=-1;

}

void seqstack::push(int x)

{

if(top==stacksize-1)throw"上溢";

top++;

data[top]=x;

}

int seqstack::pop()

{

       int n;

if(top==-1)throw"下溢";

n=data[top];

top--;

return n;

}

int seqstack::gettop()

{

if(top==-1)throw"null";

return data[top];

}

int seqstack::empty()

{

if(top==-1)return 1;

else return 0;

}

 主函数

#include<iostream>

using namespace std;

#include"seqstack.h"

 

void main()

{

seqstacks;

if(s.empty())

cout<<"Theseqstack is empty."<<endl;

else cout<<"The seqstack is NOT empty."<<endl;

cout<<"分两次对11和14进行入栈操作"<<endl;

s.push(11);

cout<<"Thetop is "<<s.gettop()<<endl;

s.push(14);

cout<<"Thetop is "<<s.gettop()<<endl;

cout<<"执行一次出栈操作"<<endl;

s.pop();

cout<<"The top is "<<s.gettop()<<endl;

}


链栈:

头文件:

#ifndef linkstack_h

#define linkstack_h

structnode

{

intdata;

 node *next;

};

class linkstack

{

private:

node*top;

public:

       linkstack();

       ~linkstack(){}

       void push(int x);

       int pop();

       int gettop();

       int empty();

};

#endif

子函数:

#include"linkstack.h"

#include<stdlib.h>

linkstack::linkstack()

{

top=NULL;

}

void linkstack::push(int x)

{

node*s;

s=newnode;

s->data=x;

s->next=top;

top=s;

}

int linkstack::pop()

{

       node *p;

       p=new node;

       int x;

if(pop==NULL)throw"下溢";

x=top->data;

p=top;

top=top->next;

delete p;

return x;

}

int linkstack::gettop()

{

return top->data;

}

int linkstack::empty()

{

if(top==NULL)return 1;

else return 0;

}

主函数:

#include<iostream>

usingnamespace std;

#include<stdlib.h>

#include"linkstack.h"

 

void main()

{

linkstackl;

if(l.empty())cout<<"The linkstack is empty"<<endl;

else cout<<"The linkstack is NOT empty"<<endl;

cout<<"分别对5和13进行压栈"<<endl;

l.push(5);

cout<<"栈顶元素为 "<<l.gettop()<<endl;

l.push(13);

cout<<"栈顶元素为 "<<l.gettop()<<endl;

cout<<"进行一次弹栈"<<endl;

cout<<"栈顶元素为 "<<endl;

l.pop();

cout<<l.gettop()<<endl;

}


顺序队列:

头文件:

#ifndef SEQQUEUE_H

#define SEQQUEUE_H

constint queuesize=10;

class seqQueue

{

intrear,front;

int data[queuesize];

public:

       seqQueue()

       {front=rear=queuesize-1;}

       ~seqQueue(){}

       void enqueue(int x);   //入队

       int dequeue();   //出队

       int getqueue();   //取对头元素

    int empty();  //判断队列是否为空

};

#endif

函数:

#include"seqQueue.h"

 void seqQueue::enqueue(int x)

{

if(front==(rear+1)%queuesize)throw"上溢";

rear=(rear+1)%queuesize;

data[rear]=x;

}

int seqQueue::dequeue()

{

if(front==rear)throw"下溢";

front=(front+1)%queuesize;

return data[front];

}

int seqQueue::getqueue()

{

       int i;

if(front==rear)throw"下溢";

i=(front+1)%queuesize;

return data[i];

}

int seqQueue::empty()

{

               if(front==rear)return 1;

                      else return 0;

}

 

主函数:

#include<iostream>

using namespace std;

#include"seqQueue.h"

void main()

{

seqQueues;

if(s.empty())cout<<"This is a NULL queue."<<endl;

else cout<<"This is NOT a NULL queue."<<endl;

cout<<"一次对4和9入队"<<endl;

s.enqueue(4);

s.enqueue(9);

cout<<"队头元素为 "<<s.getqueue()<<endl;

cout<<"进行一次出队操作  出队元素为"<<s.dequeue()<<endl;

cout<<"队头元素为 "<<s.getqueue()<<endl;

if(s.empty())cout<<"This is a NULL queue."<<endl;

else cout<<"This is NOT a NULL queue."<<endl;

}



链队列:

头文件:
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
struct node
{
int data;
node *next;
};
class linkqueue
{
node *rear,*front;
public:
linkqueue();
~linkqueue();
void enqueue(int x);
int dequeue();
int getqueue();
int empty();
};
#endif

子函数:
#include"linkqueue.h"
#include<iostream>
using namespace std;
linkqueue::linkqueue()
{
node *n;
n=new node;
n->next=NULL;
front=rear=n;
}
linkqueue::~linkqueue()
{

}
void linkqueue::enqueue(int x)   //入队
{
node *s=new node;
s->data=x;
s->next=NULL;
rear->next=s;
rear=s;
}
int linkqueue::dequeue()    //出队
{
if(front==rear) throw"下溢";
int x;
node *p=new node;
p=front->next;
x=p->data;
front->next=p->next;
return 0;
}
int linkqueue::getqueue()   //取队头元素
{
int x;
node *q=new node;
q=front->next;
x=q->data;
return x;
}
int linkqueue::empty()
{
if(front==rear)return 1;
else return 0;
}
主函数:
#include<iostream>
using namespace std;
#include"linkqueue.h"
void main()
{
linkqueue l;
if(l.empty())  cout<<"This queue is NULL "<<endl;
else cout<<"This queue isn't NULL "<<endl;
cout<<"依次对1、2和3进行入队操作 "<<endl;
l.enqueue(1);
l.enqueue(2);
l.enqueue(3);
cout<<"取队头元素为 "<<l.getqueue()<<endl;
cout<<"进行一次出队操作 "<<endl;
l.dequeue();
cout<<"取队头元素为 "<<l.getqueue()<<endl;
if(l.empty())  cout<<"This queue is NULL "<<endl;

else cout<<"This queue isn't NULL "<<endl;

}


10进制改为2进制代码:

算法实现:对任意十进制正数取出整数部分以及小数部分。对整数部分逐次对2求模,把摸存入栈,辗转相除直到商为0,再把栈内所有元素弹出,即为整数部分的二进制数;对小数部分,小数部分乘以2,再除以1的商进行入队,直到小数部分乘积大于等于1,再把队列内元素出队。两部分完成了十进制对二进制的转换。

头文件:
#ifndef seqstack_H
#define seqstack_H
const int stacksize=20;
const int queuesize=20;
class seqQueue;
class seqstack
{
private:
int data[stacksize];
public:
seqstack();
~seqstack(){}
void push(int x);
    int pop();
int top;  //top指向栈尾
};
class seqQueue 
{
int dataq[queuesize];
public:
seqQueue()
{front=rear=queuesize-1;}
~seqQueue(){}
void enqueue(int x);   //入队
int dequeue();   //出队
int rear,front;   //rear指向队尾,front指向队头元素前一个
};
#endif


子函数定义
#include"102.h"
#include<iostream>
using namespace std;
seqstack::seqstack()
{
top=-1;
}
void seqstack::push(int x)
{
if(top==stacksize-1) throw"上溢";
top++;
data[top]=x;
}
int seqstack::pop()
{
int n;
if(top==-1) throw"下溢";
n=data[top];
cout<<n;
top--;
return n;
}

void seqQueue::enqueue(int x)
{
if(front==(rear+1)%queuesize) throw"上溢";
rear=(rear+1)%queuesize;
dataq[rear]=x;
}
int seqQueue::dequeue()
{
if(front==rear) throw"下溢";
front=(front+1)%queuesize;
cout<<dataq[front];
return dataq[front];
}


主函数
#include<iostream>
using namespace std;
#include"102.h"
int main()
{
float t,a;    //t为想要转换的10进制数,a为过渡元素
int x;   
int i,m,j=1; //j为停止转换标志 
seqstack s;   //建立栈s对象
seqQueue q;  //建立队列q对象
cout<<"输入要转换为二进制的十进制数 "<<"\t";
while(j)
{cin>>t;
x=t/1.0;  // 获取整数部分
for(i=0;x!=0;i++)
{m=x%2;
s.push(m); //入栈操作
x=x/2;}
a=t-(int)t;  //获取小数部分
if(a!=0)
{while(a<=1)
{a=2*a;
x=a/1.0;
q.enqueue(x);   //进行入队操作
}}
cout<<t<<"的二进制数为";
for(i=0;s.top>=0;i++)    //输出二进制结果
s.pop();
cout<<".";
for(i=0;q.rear!=q.front;i++)
q.dequeue();
cout<<endl;
cout<<"按0结束.....按任意数字继续转换"<<endl;
cin>>j;
}
return 0;
}



猜你喜欢

转载自blog.csdn.net/x1432553805/article/details/80085779