手写数据结构:数组栈队列

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写数据结构:数组栈队列相关的知识,希望对你有一定的参考价值。

代码部分测试,等整个系列手写完再完整测试

数组

数组写的不多,刚开始比较懒

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//void del_vec_foreach(vector<int>& vec) {
//	for (vector<int>::iterator it = vec.begin(); it != vec.end();) {
//		if (*it == 3) {
//			vec.erase(it++);
//		}
//		else {
//			++it;
//		}
//	}
//}

void del_vec_foreach(vector<int>& vec) {
	for (vector<int>::iterator it = vec.begin(); it != vec.end();) {
		if (*it == 3) {
			it = vec.erase(it);
		}
		else {
			++it;
		}
	}
}


void bubbing_sort(vector<int>& vec) {
	int sz = vec.size();

	if (sz < 2)
		return;

	int flag = 0,temp = 0,stop = sz;

	while (1) {
		for (int i = 0, j = 1; j < stop; i++, j++) {

			if (vec[i] > vec[j]) {
				temp = vec[i];
				vec[i] = vec[j];
				vec[j] = temp;

				flag++;
			}
		}
	}
	if (0 == flag)
		return;
	else {
		stop = flag;
		flag = 0;
	}
}




int main() {
	vector<int> test = { 3,3,3,3,3};
	del_vec_foreach(test);

	for (vector<int>::iterator it = test.begin(); it != test.end(); it++) {
		cout << *it << endl;
	}
}

栈与队列

#include<iostream>
#include<vector>

using namespace std;

//从vector创建栈
class stack {
private:
	vector<int> content;
	int top;

public:
	stack() {
		top = -1;
	}

	bool isempty(){ return -1 == top; }

	int get_top() {
		if (isempty()) {
			return content[top];
		}
		else
			return NULL;
	}

	void push(int value) { 
		content.push_back(value);
		top++;
	}

	int pop() {
		if (!isempty()) {
			int res = content[top];
			content.pop_back();
			top--;
			return res;
		}
		else
			return NULL;
	}
};


//从vector创建队列
class queue {
private:
	int first;
	int last;
	vector<int> content;

public:
	queue() {
		first = 0;
		last = -1;
	}

	bool isempty() { return first > last; }
	bool only_one() { return first == last; }

	void push(int value) {
		content.push_back(value);
		last++;
	}

	int pop() {
		if (!isempty()) {
			int res = content[first];
			content.pop_back();
			first++;
			return res;
		}
		else
			return NULL;
	}

	int get_top() {
		if (isempty()) {
			return content[first];
		}
		else
			return NULL;
	}
};

//两个栈实现队列
class stack_to_queue {
private:
	stack *s1, *s2;
	int flag;
public:
	stack_to_queue() {
		flag = 0;
		s1 = new stack();
		s2 = new stack();
	}

	void push(int value) {
		s1->push(value);
	}

	int pop() {
		if (s2->isempty()) {
			if(!s1->isempty()){
				while (!s1->isempty()) {
					s2->push(s1->pop());
				}
				int res = s2->pop();
				return res;
			}
			else
				return NULL;
		}
		else {
			int res = s2->pop();
			return res;
		}
	}

	int get_top() {
		if (!s2->isempty()) {
			return s2->get_top();
		}
		else {
			if (!s1->isempty()) {
				while (!s1->isempty()) {
					s2->push(s1->pop());
				}
				return s2->get_top();
			}
			else
				return NULL;
		}
	}
};

//两个队列实现栈
class queue_to_stack {
private:
	queue* q1, * q2;
	int flag;
public:
	queue_to_stack() {
		flag = 0;	
		q1 = new queue();
		q2 = new queue();
	}

	void push(int value) {
		if (flag) {
			q1->push(value);
		}
		else {
			q2->push(value);
		}
		
	}

	int pop() {
		if (q1->isempty() && q2->isempty())
			return NULL;
		else {
			if (flag) {
				flag--;
				while (!q1->only_one()) {
					q2->push(q1->pop());
				}
				return q1->pop();
			}
			else {
				flag++;
				while (!q2->only_one()) {
					q1->push(q2->pop());
				}
				return q2->pop();
			}
		}
	}

	int get_top() {
		//跟上面改动不多,不写了
	}
};

以上是关于手写数据结构:数组栈队列的主要内容,如果未能解决你的问题,请参考以下文章

手写栈,队列

面试官让我手写队列,差点没写出来,回来后赶忙把重点记下来

面试官让我手写队列,差点没写出来,回来后赶忙把重点记下来

JDK常用数据结构

两个队列实现一个栈 + 两个栈实现一个队列

面试官让手写队列,差点没写出来