基本栈和队列
栈Stack-------后进先出
#pragma once
#include<cassert>
#include<iostream>
using namespace std;
template<class T>
class Stack
{
public:
Stack()
:_a(NULL)
, _size(0)
, _capacity(0)
{}
~Stack()
{
if (_a)
{
delete[] _a;
_size = _capacity=0;
}
}
void Push(const T& x)
{
CheckCapacity();
_a[_size++] = x;
}
void Pop()
{
assert(_size > 0);
_size--;
}
T& Top()
{
assert(_size > 0);
return _a[_size - 1];
}
void CheckCapacity()
{
if (_size >= _capacity)
{
_capacity = (_capacity == 0) ? 3 : _capacity * 2;
T* tmp = new T[_capacity];
for (size_t i = 0; i < _size; i++)
{
tmp[i] = _a[i];
}
delete[]_a;
_a = tmp;
}
}
bool Empty()
{
return _size == 0;
}
size_t Size()
{
return _size;
}
protected:
T* _a;
size_t _size;
size_t _capacity;
};
队列Queue----------先进先出
#pragma once
#include<cassert>
#include<iostream>
using namespace std;
template<class T>
struct QueueNode
{
T _data;
QueueNode<T>* _next;
QueueNode(const T& x)
:_data(x)
, _next(NULL)
{}
};
template<class T>
class Queue
{
typedef QueueNode<T> Node;
public:
Queue()
:_head(NULL)
,_tail(NULL)
{}
~Queue()
{
if (_head)
{
delete[] _head;
}
_head = NULL;
}
void Push(const T& x)
{
if (_tail == NULL)
{
_head = _tail = new Node(x);
}
else
{
_tail->_next = new Node(x);
_tail = _tail->_next;
}
}
void Pop()
{
if (_head)
{
Node* cur = _head ->_next ;
delete _head;
_head = cur;
}
}
T& Front()
{
assert(_head);
return _head->_data;
}
size_t Size()
{
size_t count = 0;
Node* cur = _head;
while (cur)
{
++count;
cur = cur->_next;
}
return count;
}
bool Empty()
{
return _head == NULL;
}
protected:
Node* _head;
Node* _tail;
};
#include"Queue.h"
#include"Stack.h"
#include<windows.h>
void TestStack()
{
Stack<int> s1;
Stack<int> s2;
s1.Push(1);
s1.Push(2);
s1.Push(3);
s1.Push(4);
while (!s1.Empty())
{
cout << s1.Top() << " ";
s2.Push(s1.Top());
s1.Pop();
}
cout << endl;
while (!s2.Empty())
{
cout << s2.Top() << " ";
s2.Pop();
}
}
void TestQueue()
{
Queue<int> q1;
q1.Push(1);
q1.Push(2);
q1.Push(3);
q1.Push(4);
while (q1.Size() > 0)
{
cout << q1.Front() << " ";
q1.Pop();
}
}
int main()
{
//TestStack();
TestQueue();
system("pause");
return 0;
}
面试题,静候更新.....