信管117118李志荣数据结构实验二

实验二

一.

(1)顺序栈的实现

//exp2_1.cpp--设计一个顺序栈,实现出栈和入栈操作
#include<iostream>
using namespace std;

const int StackSize = 5;

template <typename T>
class Stack
{
	private:
		int top;
		T data[StackSize];
	public:
		Stack() { top = -1; }
		~Stack(){}
		void input(T x);
		T Pop();
		int Gettop() { return top; }
	
};

int main()
{
	Stack<int> st;
	st.input(5);
	st.input(4);
	cout << st.Pop();
	cout<<st.Gettop();
	return 0;
}

template <typename T>
void Stack<T>::input(T x)
{
	if (top >= StackSize - 1) throw"overflow";
	data[++top] = x;
}

template <typename T>
T Stack<T>::Pop()
{
	if (top <= -1) throw"underflow";
	T x;
	x = data[top--];
	return x;
}

(2)链栈的实现

//exp2_1.cpp--设计一个链栈,实现出栈和入栈操作
#include<iostream>
using namespace std;

template <typename T>
class Stack
{
	private:
	struct Node
	{
		T data;
		Node *next;
	};
	Node *top;
	public:
		Stack() { top = NULL; }
		~Stack(){}
		void input(T x);
		T Pop();
		T Gettop() { if (top != NULL) return top->data; }

};

int main()
{
	Stack<int> st;
	st.input(5);
	st.input(4);
	st.input(3);
	cout << st.Pop();
	cout << st.Gettop();
	return 0;
}

template <typename T>
void Stack<T>::input(T x)
{
	Node *s = new Node;
	s->data = x;
	s->next = top;
	top = s;
}

template <typename T>
T Stack<T>::Pop()
{
	if (top == NULL) throw "underflow";
	T x;
	Node *p = top;
	x = top->data;
	top = top->next;
	delete p;
	return x;
}

(3)顺序队列的实现

//exp2_2--建立顺序队列,实现入队和出队操作
#include<iostream>
using namespace std;

const int Queue = 5;

template<typename T>
class CirQueue
{
private:
	int rear, front;
	T data[Queue];
public:
	CirQueue() { rear = front = Queue-1; }
	~CirQueue(){}
	void input(T x);
	T output();
	T Getfront();
};
int main()
{
	CirQueue<int> cir;
	cir.input(5);
	cir.input(4);
	cout<<cir.output();
	cout<<cir.Getfront();
	return 0;
}

template<typename T>
void CirQueue<T>::input(T x)
{
	if ((rear+1)%Queue == front) throw"overflow";
	rear = (rear + 1) % Queue;
	data[rear] = x;
}

template<typename T>
T CirQueue<T>::output()
{
	if (rear == front) throw "underflow";
	front = (front + 1) % Queue;
	return data[front];
}
template<typename T>
T CirQueue<T>::Getfront()
{
	if (rear == front) throw "underflow";
	return data[(front+1)%Queue];
}

4.链队列的实现

//exp2_2--建立链队列,实现入队和出队操作
#include<iostream>
using namespace std;

template<typename T>
class LinkQueue
{
private:
	struct Node
	{
		T data;
		Node *next;		
	};
	Node *rear, *front;
public:
	LinkQueue() { Node *s = new Node; rear = front = s; }
	~LinkQueue(){}
	void input(T x);
	T output();
	T Getfront();
};
int main()
{
	LinkQueue<int> lik;
	lik.input(5);
	lik.input(4);
	cout<<lik.output();
	cout<<lik.Getfront();
	return 0;
}

template<typename T>
void LinkQueue<T>::input(T x)
{
	Node *s = new Node;
	s->data = x;
	rear->next = s;
	rear = s;
}

template<typename T>
T LinkQueue<T>::output()
{
	if (rear == front) throw "underflow";
	T x;
	Node *p;
	x = front->next->data;
	p = front->next;
	front->next = p->next;
	delete p;
	return x;
}

template<typename T>
T LinkQueue<T>::Getfront()
{
	if (rear == front) throw "underflow";
	return front->next->data;
}

二.设计算法并写出代码,实现一个十将二进制转换成2进制数

//exp3_2--十进制转二进制
#include<iostream>
using namespace std;

const int MAX = 64;
void dec_to_bin(int);  //正数的十进制转二进制
void negative_dec_to_bin(int);  //负数的十进制转二进制
int main()
{
	cout << "Enter a decimal number: ";
	int dec_num;
	cin >> dec_num;
	if (dec_num < 0) negative_dec_to_bin(dec_num);
	else if (dec_num == 0) cout << "The decimal number  " << dec_num << " conversion to binary is: " << dec_num;
	else dec_to_bin(dec_num);
	cout << endl <<  "BYB!";
	return 0;
}

void negative_dec_to_bin(int dec)
{
	int temp;
	temp = -dec;	//负数转为正数以求出原码
	int data[MAX];   //定义一个int数组以存储二进制代码
	int count = 0;	 //count变量计算该数字由多少位二进制组成
	while (temp != 1)		
	{
		data[count] = temp % 2;
		count++;
		temp = temp / 2;
	}
	data[count] = 1;  //大于0的十进制的数字,其二进制第一位必为0
	for(int i=count;i>=0;i--)	//循环使原码转换为反码
	{
		if (data[i] == 0) data[i] = 1;
		else data[i] = 0;
	}
	for(int j=count;j>=0;j--)	//使反码转为补码
	{
		if (data[j] == 0) { data[j] = 1; break; }
		if (data[j] == 1)  data[j] = 0; 
	}
	for (int k = 0; k <= count; k++)	//输出补码
		cout << data[k ];
}

void dec_to_bin(int dec)
{
	int temp;
	temp = dec;
	int data[MAX];
	int count = 0;
	while(temp!=1)		//求出二进制代码
	{
		data[count] = temp % 2;
		count++;
		temp = temp / 2;
	}
	data[count] = 1;
	for(;count>=0;count--)
		cout << data[count];
}

猜你喜欢

转载自blog.csdn.net/rumple49/article/details/80011465