使用C++模板:
Template <class或者也可以用typename T>
template <class T>//template是标识符
说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个 ,每个形参前都要加class <类型 形参表>可以包含基本数据类型可以包含类类型.
注意:template <class T> 有效期只有一次,需要多少次要声明多少次
使用时只要用node<T>即可
实例:
template <class T>
struct stack {
T* st;
int tp;
stack() {
tp = -1;
st = new T[1000];
}
void pop() {
if(tp == -1) {
int a = 1 / 0;
}
--tp;
}
T top() {
if(tp == -1) {
int a = 1/ 0;
}
return st[tp--];
}
void push(T a) {
st[++tp] = a;
}
bool empty() {
return tp == -1;
}
void clear() {
tp = -1;
}
};
int main() {
stack<char> st;
char s[1000];
while(cin >> s){
st.clear();
bool f = true;
for(char* k = s; *k; k++) {
if(*k == '(') st.push(*k);
else {
if(st.empty()) {
f = false;
break;
} else {
st.pop();
}
}
}
cout<<f<<endl;
}
}//以上为师傅代码
以上代码实现栈的基本功能并利用所写的栈来实现括号匹配。
使用双向链表来实现队列并利用所写的堆来实现树的层次遍历
#include <iostream>
#include <vector>
using namespace std;
template <class T>
struct node{
node *next;
node *prior;
T data;
node(){
}
};
template <class T>//有效期只有一次
struct Q{
node<T>* front;//长见识了
node<T>* end;
Q(){
front=NULL;
end=NULL;
}
void push(T a){
node<T> *n=new node<T>();
n->data=a;
if(!front) {
front=n;
front->prior=NULL;
}
if(!end) {
end=n;
// n-> prior=NULL;
}
else{
n->prior=end;
end->next=n;
end=n;
}
end->next=NULL;
}
void pop(){
if(!front) {
cout<<"error ::the queue is NULL"<<endl;
return ;
}
node<T> *n;
n=front;
front=n->next;
if(front)
front->prior=NULL;
else end=NULL;
delete(n);
}
T visitTop(){
if(front)
return front->data;
else {
cout<<"error";
return NULL;
}
}
bool empty(){
if(!front) return 1;
else return 0;
}
};
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct Node {
TreeNode *u;
int level;
Node(TreeNode *a=NULL,int b=0){
u=a;
level=b;
}
};
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > vv;
Q<Node> q;
vector<int> E;
if(root!=NULL)
{
q.push(Node(root,0));
}
while(!q.empty())
{
Node temp=q.visitTop();
q.pop();
int level=temp.level;
if(vv.size()==level){//NULL树的特殊处理
vv.push_back(E);//NULL树的特殊处理
}//NULL树的特殊处理
if(temp.u->left) {q.push(Node(temp.u->left,level+1));}
if(temp.u->right) {q.push(Node(temp.u->right,level+1));}
vv[level].push_back(temp.u->val);
}//很傻的方法,要多看看师傅的代码
return vv;
}
};
int main ()
{
TreeNode root(1);
Solution s;
s.levelOrder(&root);
return 0;
}
师傅博客:http://ofpsxx.com