数据结构期末上机范围

邻接表BFS/DFS

#include <iostream>
using namespace std;

#define MAX_VER_NUM  20
#define MAX_EDGE_NUM 200
bool visited[MAX_VER_NUM];

class Queue{
private:
	int data[MAX_VER_NUM];
	int front;
	int rear;
public:
	void InitQueue();
	bool QueueEmpty();
	bool EnQueue(int e);
	int DeQueue();
};

void Queue::InitQueue(){
	front = rear = 0;
}

bool Queue::QueueEmpty(){
	if(rear==front)
		return true;
	else return false;
}

bool Queue::EnQueue(int e){
	if((rear+1)%MAX_VER_NUM==front)
		return false;
	else{
		data[rear] = e;
		rear = (rear+1)%MAX_VER_NUM;
		return true;
	}
}

int Queue::DeQueue(){
	if(QueueEmpty())
		return false;
	else{
		int temp_front = front;
		front = (front+1)%MAX_VER_NUM;
		return data[temp_front];
	}
}

typedef struct EdgeNode{
	int adjvex;
	EdgeNode* next;
}EdgeNode;

typedef struct VtxNode{
	int data;
	EdgeNode* first;
}VtxNode, AdjList[MAX_VER_NUM];


class Graph{
private:
	AdjList vertices;
	int vtxnum, edgenum;
public:
	void CreatGraph();
	void BFS();
	void DFSTravel(int v);
	void DFS();
};

void Graph::CreatGraph(){
	cout << "请输入顶点数和边数:";
	cin >> vtxnum >> edgenum;
	cout << endl << "请输入每个顶点的信息:";
	for(int i=0; i<vtxnum; i++){
		cin >> vertices[i].data;
		vertices[i].first = NULL;
	}
	cout << "请输入每条边的起点和终点:" << endl;
	for(int j=0; j<edgenum; j++){
		int vi, vj;
		cin >> vi >> vj;
		EdgeNode* e1 = new EdgeNode;
		EdgeNode* e2 = new EdgeNode;
		e1->adjvex = vi;
		e2->adjvex = vj;
		//有向边
		e2->next = vertices[vi].first;
		vertices[vi].first = e2;
	}
}

void Graph::DFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = 0;
	for(int j=0; j<vtxnum; j++)
		if(!visited[j])
			DFSTravel(j);
	cout << endl;
}

void Graph::DFSTravel(int v){
	visited[v] = true;
	cout << v << " ";
	EdgeNode* p = vertices[v].first;
	while(p){
		if(!visited[p->adjvex])
			DFSTravel(p->adjvex);
		p = p->next;
	}
}

void Graph::BFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	Queue Q;
	Q.InitQueue();
	for(int j=0; j<vtxnum; j++){
		if(!visited[j]){
			visited[j]=true;
			cout << j << " ";
			Q.EnQueue(j);
			while(!Q.QueueEmpty()){
				int w = Q.DeQueue();
				EdgeNode* p = vertices[w].first;
				while(p){
					if(!visited[p->adjvex]){
						cout << p->adjvex << " ";
						visited[p->adjvex] = true;
						Q.EnQueue(p->adjvex);
					}
					p = p->next;
				}
			}
		}
	}
}


int main(){
	Graph G;
	G.CreatGraph();
	G.DFS();
	G.BFS();
	return 0;
}

邻接矩阵BFS/DFS

#include <iostream>
using namespace std;

#define MAX_VER_NUM  20
#define MAX_EDGE_NUM 200
#define INFINITY 2738432
bool visited[MAX_VER_NUM];

class Queue{
private:
	int data[MAX_VER_NUM];
	int front;
	int rear;
public:
	void InitQueue();
	bool QueueEmpty();
	bool EnQueue(int e);
	int DeQueue();
};

void Queue::InitQueue(){
	front = rear = 0;
}

bool Queue::QueueEmpty(){
	if(rear==front)
		return true;
	else return false;
}

bool Queue::EnQueue(int e){
	if((rear+1)%MAX_VER_NUM==front)
		return false;
	else{
		data[rear] = e;
		rear = (rear+1)%MAX_VER_NUM;
		return true;
	}
}

int Queue::DeQueue(){
	if(QueueEmpty())
		return false;
	else{
		int temp_front = front;
		front = (front+1)%MAX_VER_NUM;
		return data[temp_front];
	}
}

class Graph{
private:
	int vertices[MAX_VER_NUM];
	int matrix[MAX_VER_NUM][MAX_VER_NUM];
	int vtxnum, edgenum;
public:
	void CreatGraph();
	void BFS();
	void DFSTravel(int v);
	void DFS();
};

void Graph::CreatGraph(){
	cout << "请输入顶点数和边数:";
	cin >> vtxnum >> edgenum;
	cout << endl << "请输入每个顶点的信息:";
	for(int i=0; i<vtxnum; i++)
		cin >> vertices[i];
	for(int j=0; j<vtxnum; j++)
		for(int k=0; k<vtxnum; k++)
			matrix[j][k] = INFINITY;
	cout << endl << "请输入每条边的起点和终点:" << endl;
	for(int s=0; s<edgenum; s++){
		int vi,vj;
		cin >> vi >> vj;
		matrix[vi][vj] = 1;//有向图
	}
}

void Graph::DFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	for(int j=0; j<vtxnum; j++)
		if(!visited[j])
			DFSTravel(j);
	cout << endl;
}

void Graph::DFSTravel(int v){
	cout << v << " ";
	visited[v] = true;
	for(int j=0; j<vtxnum; j++)
		if(matrix[v][j]==1 && !visited[j])
			DFSTravel(j);
}

void Graph::BFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	Queue Q;
	Q.InitQueue();
	for(int j=0; j<vtxnum; j++){
		if(!visited[j]){
			cout << j << " ";
			visited[j] = true;
			Q.EnQueue(j);
			while(!Q.QueueEmpty()){
				int w = Q.DeQueue();
				for(int k=0; k<vtxnum; k++){
					if(!visited[k] && matrix[w][k]==1){
						cout << k << " ";
						visited[k] = true;
						Q.EnQueue(k);
					}
				}
			}
		}
	}
}

int main(){
	Graph G;
	G.CreatGraph();
	G.DFS();
	G.BFS();
	return 0;
}

查找

顺序查找

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void OrderSearch();
};


List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::OrderSearch(){
	cout << "请输入要查找的数:";
	int key;	cin >> key;
	int flag=0;
	for(int i=0; i<length; i++){
		if(listarray[i]==key){
			flag=1;
			cout << "该数在第" << i+1 << "个位置" << endl;
			break;
		}
	}
	if(flag==0)
		cout << "未找到该数!" << endl;
}



int main() {
	List l1(10);
	l1.creatList();
	l1.OrderSearch();
	return 0;
}

折半查找

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void BinarySearch();
};


List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::BinarySearch(){
	cout << "请输入要查找的数:";
	int key;	cin >> key;
	int flag = 0, low = 0, high = length-1;
	while(low <= high){
		int mid = (low+high)/2;
		if(listarray[mid]==key){
			flag=1;
			cout << "该数在第" << mid+1 << "个位置" << endl;
			break;
		}
		else if(listarray[mid]>key)
			high = mid-1;
		else low = mid+1;
	}
	if(flag==0)
		cout << "未找到该数!" << endl;
}



int main() {
	List l1(10);
	l1.creatList();
	l1.BinarySearch();
	return 0;
}

排序

堆排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void HeapInsert();
	void Heapify(int curr_length);
	void HeapSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::HeapInsert(){
	for(int i=1; i<length; i++){
		int current = i, parent = (i-1)/2;
		while(listarray[current]>listarray[parent]){
			swap(listarray[current], listarray[parent]);
			current = parent;
			parent = (current-1)/2;
		}
	}
}

void List::Heapify(int curr_length){
	int index = 0, left = 1, right = 2, largeindex;
	while(left < curr_length){
		if(listarray[left]<listarray[right] && right<curr_length)
			largeindex = right;
		else largeindex = left;
		if(listarray[index]>listarray[largeindex])
			break;
		else{
			swap(listarray[index], listarray[largeindex]);
			index = largeindex;
			left = 2*index+1;
			right = 2*index+2;
		}
	}
}

void List::HeapSort(){
	HeapInsert();
	int curr_length = length;
	while(curr_length>1){
		swap(listarray[0], listarray[curr_length-1]);
		curr_length--;
		Heapify(curr_length);
	}
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.HeapSort();
	l1.showList();
	return 0;
}

归并排序(递归版)

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void MergeSort();
	void MergeSortHelp(int left, int right);
	void Merge(int left, int right);
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::Merge(int left, int right){
	int* copyarray = new int[right-left+1];
	int mid = (left+right)/2, i=left, j=mid+1, k=0;
	while(i<=mid && j<=right){
		if(listarray[i]<listarray[j])
			copyarray[k++] = listarray[i++];
		else
			copyarray[k++] = listarray[j++];
	}
	while(i<=mid)	copyarray[k++] = listarray[i++];
	while(j<=right)	copyarray[k++] = listarray[j++];
	for(int s=left; s<=right; s++)
		listarray[s] = copyarray[s-left];
	delete []copyarray;
}


void List::MergeSortHelp(int left, int right){
	if(left<right){
		int mid = (left+right)/2;
		MergeSortHelp(left, mid);
		MergeSortHelp(mid+1, right);
		Merge(left, right);
	}
}

void List::MergeSort(){
	MergeSortHelp(0, length-1);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.MergeSort();
	l1.showList();
	return 0;
}

简单选择排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void SelectSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::SelectSort(){
	for(int i=0; i<length; i++){
		int min_index = i;
		for(int j=i+1; j<length; j++){
			if(listarray[min_index] > listarray[j])
				min_index = j;
		}
		if(i!=min_index)
			swap(listarray[min_index], listarray[i]);
	}
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.SelectSort();
	l1.showList();
	return 0;
}

快速排序(递归版)

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	int partition(int left, int right);
	void QuickSortHelp(int left, int right);
	void QuickSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

int List::partition(int left, int right){
	int povit = listarray[left], i = left, j = right;
	while(i<j){
		while(listarray[j]>=povit && i<j)//记得加等号
			j--;
		while(listarray[i]<=povit && i<j)//记得加等号
			i++;
		if(i<j)
			swap(listarray[i], listarray[j]);
	}
	swap(listarray[left], listarray[i]);
	return i;
}

void List::QuickSortHelp(int left, int right){
	if(left<right){
		int mid = partition(left, right);
		QuickSortHelp(left, mid-1);
		QuickSortHelp(mid+1, right);
	}
}


void List::QuickSort(){
	QuickSortHelp(0, length-1);
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.QuickSort();
	l1.showList();
	return 0;
}

冒泡排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BubbleSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BubbleSort(){
	for(int i=0; i<length-1; i++)
		for(int j=0; j<length-1-i; j++)
			if(listarray[j]>listarray[j+1])
				swap(listarray[j], listarray[j+1]);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BubbleSort();
	l1.showList();
	return 0;
}

🆙🆙🆙升级版

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BubbleSort2();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BubbleSort2(){
	for(int i=0; i<length-1; i++){
		bool flag = 0;
		for(int j=0; j<length-1-i; j++){
			if(listarray[j]>listarray[j+1]){
				swap(listarray[j], listarray[j+1]);
				flag = 1;
			}
		}
		if(flag==0)
			break;
	}
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BubbleSort2();
	l1.showList();
	return 0;
}

折半插入排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BinaryInsertSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BinaryInsertSort(){
	int i,low,high,mid,temp;
	for(i=1; i<length; i++){
		temp = listarray[i];
		low = 0;
		high = i-1;
		while(low <= high){
			mid = (low+high)/2;
			if(temp > listarray[mid])
				low = mid+1;
			else high = mid-1;
		}
		for(int j=i-1; j>=low; j--)
			listarray[j+1] = listarray[j];
		listarray[high+1] = temp;
	}
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BinaryInsertSort();
	l1.showList();
	return 0;
}

直接插入排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void InsertSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::InsertSort(){
	for(int i=1; i<length; i++)
		for(int j=i-1; j>=0; j--)
			if(listarray[j]>listarray[j+1])
				swap(listarray[j], listarray[j+1]);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.InsertSort();
	l1.showList();
	return 0;
}

邻接表BFS/DFS

#include <iostream>
using namespace std;

#define MAX_VER_NUM  20
#define MAX_EDGE_NUM 200
bool visited[MAX_VER_NUM];

class Queue{
private:
	int data[MAX_VER_NUM];
	int front;
	int rear;
public:
	void InitQueue();
	bool QueueEmpty();
	bool EnQueue(int e);
	int DeQueue();
};

void Queue::InitQueue(){
	front = rear = 0;
}

bool Queue::QueueEmpty(){
	if(rear==front)
		return true;
	else return false;
}

bool Queue::EnQueue(int e){
	if((rear+1)%MAX_VER_NUM==front)
		return false;
	else{
		data[rear] = e;
		rear = (rear+1)%MAX_VER_NUM;
		return true;
	}
}

int Queue::DeQueue(){
	if(QueueEmpty())
		return false;
	else{
		int temp_front = front;
		front = (front+1)%MAX_VER_NUM;
		return data[temp_front];
	}
}

typedef struct EdgeNode{
	int adjvex;
	EdgeNode* next;
}EdgeNode;

typedef struct VtxNode{
	int data;
	EdgeNode* first;
}VtxNode, AdjList[MAX_VER_NUM];


class Graph{
private:
	AdjList vertices;
	int vtxnum, edgenum;
public:
	void CreatGraph();
	void BFS();
	void DFSTravel(int v);
	void DFS();
};

void Graph::CreatGraph(){
	cout << "请输入顶点数和边数:";
	cin >> vtxnum >> edgenum;
	cout << endl << "请输入每个顶点的信息:";
	for(int i=0; i<vtxnum; i++){
		cin >> vertices[i].data;
		vertices[i].first = NULL;
	}
	cout << "请输入每条边的起点和终点:" << endl;
	for(int j=0; j<edgenum; j++){
		int vi, vj;
		cin >> vi >> vj;
		EdgeNode* e1 = new EdgeNode;
		EdgeNode* e2 = new EdgeNode;
		e1->adjvex = vi;
		e2->adjvex = vj;
		//有向边
		e2->next = vertices[vi].first;
		vertices[vi].first = e2;
	}
}

void Graph::DFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = 0;
	for(int j=0; j<vtxnum; j++)
		if(!visited[j])
			DFSTravel(j);
	cout << endl;
}

void Graph::DFSTravel(int v){
	visited[v] = true;
	cout << v << " ";
	EdgeNode* p = vertices[v].first;
	while(p){
		if(!visited[p->adjvex])
			DFSTravel(p->adjvex);
		p = p->next;
	}
}

void Graph::BFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	Queue Q;
	Q.InitQueue();
	for(int j=0; j<vtxnum; j++){
		if(!visited[j]){
			visited[j]=true;
			cout << j << " ";
			Q.EnQueue(j);
			while(!Q.QueueEmpty()){
				int w = Q.DeQueue();
				EdgeNode* p = vertices[w].first;
				while(p){
					if(!visited[p->adjvex]){
						cout << p->adjvex << " ";
						visited[p->adjvex] = true;
						Q.EnQueue(p->adjvex);
					}
					p = p->next;
				}
			}
		}
	}
}


int main(){
	Graph G;
	G.CreatGraph();
	G.DFS();
	G.BFS();
	return 0;
}

邻接矩阵BFS/DFS

#include <iostream>
using namespace std;

#define MAX_VER_NUM  20
#define MAX_EDGE_NUM 200
#define INFINITY 2738432
bool visited[MAX_VER_NUM];

class Queue{
private:
	int data[MAX_VER_NUM];
	int front;
	int rear;
public:
	void InitQueue();
	bool QueueEmpty();
	bool EnQueue(int e);
	int DeQueue();
};

void Queue::InitQueue(){
	front = rear = 0;
}

bool Queue::QueueEmpty(){
	if(rear==front)
		return true;
	else return false;
}

bool Queue::EnQueue(int e){
	if((rear+1)%MAX_VER_NUM==front)
		return false;
	else{
		data[rear] = e;
		rear = (rear+1)%MAX_VER_NUM;
		return true;
	}
}

int Queue::DeQueue(){
	if(QueueEmpty())
		return false;
	else{
		int temp_front = front;
		front = (front+1)%MAX_VER_NUM;
		return data[temp_front];
	}
}

class Graph{
private:
	int vertices[MAX_VER_NUM];
	int matrix[MAX_VER_NUM][MAX_VER_NUM];
	int vtxnum, edgenum;
public:
	void CreatGraph();
	void BFS();
	void DFSTravel(int v);
	void DFS();
};

void Graph::CreatGraph(){
	cout << "请输入顶点数和边数:";
	cin >> vtxnum >> edgenum;
	cout << endl << "请输入每个顶点的信息:";
	for(int i=0; i<vtxnum; i++)
		cin >> vertices[i];
	for(int j=0; j<vtxnum; j++)
		for(int k=0; k<vtxnum; k++)
			matrix[j][k] = INFINITY;
	cout << endl << "请输入每条边的起点和终点:" << endl;
	for(int s=0; s<edgenum; s++){
		int vi,vj;
		cin >> vi >> vj;
		matrix[vi][vj] = 1;//有向图
	}
}

void Graph::DFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	for(int j=0; j<vtxnum; j++)
		if(!visited[j])
			DFSTravel(j);
	cout << endl;
}

void Graph::DFSTravel(int v){
	cout << v << " ";
	visited[v] = true;
	for(int j=0; j<vtxnum; j++)
		if(matrix[v][j]==1 && !visited[j])
			DFSTravel(j);
}

void Graph::BFS(){
	for(int i=0; i<vtxnum; i++)
		visited[i] = false;
	Queue Q;
	Q.InitQueue();
	for(int j=0; j<vtxnum; j++){
		if(!visited[j]){
			cout << j << " ";
			visited[j] = true;
			Q.EnQueue(j);
			while(!Q.QueueEmpty()){
				int w = Q.DeQueue();
				for(int k=0; k<vtxnum; k++){
					if(!visited[k] && matrix[w][k]==1){
						cout << k << " ";
						visited[k] = true;
						Q.EnQueue(k);
					}
				}
			}
		}
	}
}

int main(){
	Graph G;
	G.CreatGraph();
	G.DFS();
	G.BFS();
	return 0;
}

查找

顺序查找

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void OrderSearch();
};


List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::OrderSearch(){
	cout << "请输入要查找的数:";
	int key;	cin >> key;
	int flag=0;
	for(int i=0; i<length; i++){
		if(listarray[i]==key){
			flag=1;
			cout << "该数在第" << i+1 << "个位置" << endl;
			break;
		}
	}
	if(flag==0)
		cout << "未找到该数!" << endl;
}



int main() {
	List l1(10);
	l1.creatList();
	l1.OrderSearch();
	return 0;
}

折半查找

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void BinarySearch();
};


List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::BinarySearch(){
	cout << "请输入要查找的数:";
	int key;	cin >> key;
	int flag = 0, low = 0, high = length-1;
	while(low <= high){
		int mid = (low+high)/2;
		if(listarray[mid]==key){
			flag=1;
			cout << "该数在第" << mid+1 << "个位置" << endl;
			break;
		}
		else if(listarray[mid]>key)
			high = mid-1;
		else low = mid+1;
	}
	if(flag==0)
		cout << "未找到该数!" << endl;
}



int main() {
	List l1(10);
	l1.creatList();
	l1.BinarySearch();
	return 0;
}

排序

堆排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void HeapInsert();
	void Heapify(int curr_length);
	void HeapSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::HeapInsert(){
	for(int i=1; i<length; i++){
		int current = i, parent = (i-1)/2;
		while(listarray[current]>listarray[parent]){
			swap(listarray[current], listarray[parent]);
			current = parent;
			parent = (current-1)/2;
		}
	}
}

void List::Heapify(int curr_length){
	int index = 0, left = 1, right = 2, largeindex;
	while(left < curr_length){
		if(listarray[left]<listarray[right] && right<curr_length)
			largeindex = right;
		else largeindex = left;
		if(listarray[index]>listarray[largeindex])
			break;
		else{
			swap(listarray[index], listarray[largeindex]);
			index = largeindex;
			left = 2*index+1;
			right = 2*index+2;
		}
	}
}

void List::HeapSort(){
	HeapInsert();
	int curr_length = length;
	while(curr_length>1){
		swap(listarray[0], listarray[curr_length-1]);
		curr_length--;
		Heapify(curr_length);
	}
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.HeapSort();
	l1.showList();
	return 0;
}

归并排序(递归版)

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void MergeSort();
	void MergeSortHelp(int left, int right);
	void Merge(int left, int right);
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::Merge(int left, int right){
	int* copyarray = new int[right-left+1];
	int mid = (left+right)/2, i=left, j=mid+1, k=0;
	while(i<=mid && j<=right){
		if(listarray[i]<listarray[j])
			copyarray[k++] = listarray[i++];
		else
			copyarray[k++] = listarray[j++];
	}
	while(i<=mid)	copyarray[k++] = listarray[i++];
	while(j<=right)	copyarray[k++] = listarray[j++];
	for(int s=left; s<=right; s++)
		listarray[s] = copyarray[s-left];
	delete []copyarray;
}


void List::MergeSortHelp(int left, int right){
	if(left<right){
		int mid = (left+right)/2;
		MergeSortHelp(left, mid);
		MergeSortHelp(mid+1, right);
		Merge(left, right);
	}
}

void List::MergeSort(){
	MergeSortHelp(0, length-1);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.MergeSort();
	l1.showList();
	return 0;
}

简单选择排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void SelectSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::SelectSort(){
	for(int i=0; i<length; i++){
		int min_index = i;
		for(int j=i+1; j<length; j++){
			if(listarray[min_index] > listarray[j])
				min_index = j;
		}
		if(i!=min_index)
			swap(listarray[min_index], listarray[i]);
	}
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.SelectSort();
	l1.showList();
	return 0;
}

快速排序(递归版)

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	int partition(int left, int right);
	void QuickSortHelp(int left, int right);
	void QuickSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

int List::partition(int left, int right){
	int povit = listarray[left], i = left, j = right;
	while(i<j){
		while(listarray[j]>=povit && i<j)//记得加等号
			j--;
		while(listarray[i]<=povit && i<j)//记得加等号
			i++;
		if(i<j)
			swap(listarray[i], listarray[j]);
	}
	swap(listarray[left], listarray[i]);
	return i;
}

void List::QuickSortHelp(int left, int right){
	if(left<right){
		int mid = partition(left, right);
		QuickSortHelp(left, mid-1);
		QuickSortHelp(mid+1, right);
	}
}


void List::QuickSort(){
	QuickSortHelp(0, length-1);
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.QuickSort();
	l1.showList();
	return 0;
}

冒泡排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BubbleSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BubbleSort(){
	for(int i=0; i<length-1; i++)
		for(int j=0; j<length-1-i; j++)
			if(listarray[j]>listarray[j+1])
				swap(listarray[j], listarray[j+1]);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BubbleSort();
	l1.showList();
	return 0;
}

🆙🆙🆙升级版

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BubbleSort2();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BubbleSort2(){
	for(int i=0; i<length-1; i++){
		bool flag = 0;
		for(int j=0; j<length-1-i; j++){
			if(listarray[j]>listarray[j+1]){
				swap(listarray[j], listarray[j+1]);
				flag = 1;
			}
		}
		if(flag==0)
			break;
	}
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BubbleSort2();
	l1.showList();
	return 0;
}

折半插入排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void BinaryInsertSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::BinaryInsertSort(){
	int i,low,high,mid,temp;
	for(i=1; i<length; i++){
		temp = listarray[i];
		low = 0;
		high = i-1;
		while(low <= high){
			mid = (low+high)/2;
			if(temp > listarray[mid])
				low = mid+1;
			else high = mid-1;
		}
		for(int j=i-1; j>=low; j--)
			listarray[j+1] = listarray[j];
		listarray[high+1] = temp;
	}
}

int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.BinaryInsertSort();
	l1.showList();
	return 0;
}

直接插入排序

#include <iostream>
using namespace std;

class List {
private:
	int* listarray;
	int length;
public:
	List(int l);
	~List();
	void creatList();
	void showList();
	void InsertSort();
};

void swap(int& a, int& b){
	int temp = a;
	a = b;
	b = temp;
}

List::List(int l){
	length = l;
	listarray = new int[l];
}

List::~List(){delete []listarray;}

void List::creatList(){
	cout << "请依次输入" << length << "个整数:";
	for(int i=0; i<length; i++)
		cin >> listarray[i];
}

void List::showList(){
	for(int i=0; i<length; i++)
		cout << listarray[i] << " ";
	cout << endl;
}

void List::InsertSort(){
	for(int i=1; i<length; i++)
		for(int j=i-1; j>=0; j--)
			if(listarray[j]>listarray[j+1])
				swap(listarray[j], listarray[j+1]);
}


int main() {
	List l1(10);
	l1.creatList();
	cout << "按从小到大顺序排列:" ;
	l1.InsertSort();
	l1.showList();
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值