锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include<stdlib.h>
using namespace std;
const int DefaultSize=100;
enum KindOfStatus{Active,Empty,Deleted}; //鍏冪礌鍒嗙被(媧誨姩/絀?/span>/鍒?
template<class E,class K>
class HashTable
{
public:
HashTable(const int d,int sz=DefaultSize);
~HashTable(){delete []ht;delete []info;}
bool Insert(const E &e1); //鍦ㄦ暎鍒楄〃涓彃鍏1
bool Remove(const K k1); //鍦ㄦ暎鍒楄〃涓垹闄?br> E Search(const K k1,E& e1)const;//鍦ㄦ暎鍒楄〃鎼滅儲k1
void makeEmpty(); //緗暎鍒楄〃涓虹┖
private:
int divitor; //鏁e垪琛ㄧ殑闄ゆ暟
int CurrentSize,TableSize; //褰撳墠妗舵暟鍙婃渶澶ф《鏁?br> E *ht; //鏁e垪琛ㄥ瓨鍌ㄦ暟緇?br> KindOfStatus *info; //鐘舵佹暟緇?br> int FindPos(const K k1)const; //鏁e垪鍑芥暟,璁$畻鍒濆妗跺彿
};
template<class E,class K>
HashTable<E,K>::HashTable(const int d,int sz)
{
divitor=d;
TableSize=sz;
CurrentSize=0;
ht=new E[TableSize];
info=new KindOfStatus[TableSize];
for(int i=0;i<TableSize;i++)
info[i]=Empty;
};
template<class E,class K>
int HashTable<E,K>::FindPos(const K k1)const
{
int i=k1%divitor;//璁$畻鍒濆妗跺彿
int j=i; //媯嫻嬩笅涓絀烘《涓嬫爣
do
{
if(info[j]==Empty||info[j]==Active&&ht[j]==k1) return j; //鎵懼埌
j=(j+1)%TableSize; //褰撳仛寰幆琛ㄥ鐞嗭紝鎵句笅涓涓┖妗?br> }while(j!=i);
return j;
};
template<class E,class K>
bool HashTable<E,K>::Insert(const E& e1)
{
K k1=e1; //閲嶈澆鍑芥暟::鎶藉彇鍑芥暟
int i=FindPos(k1); //鐢ㄦ暎鍒楀嚱鏁拌綆楁《鍙?br> if(info[i]!=Active)
{
ht[i]=e1;
info[i]=Active;
CurrentSize++;
return true;
}
if(info[i]==Active&&ht[i]==e1)
{
cout<<"琛ㄤ腑宸叉湁鍏冪礌,涓嶈兘鎻掑叆!"<<endl;
return false;
}
cout<<"琛ㄥ凡婊?涓嶈兘鎻掑叆鏁版嵁!";
return false;
};
template<class E,class K>
bool HashTable<E,K>::Remove(const K k1)
{
int i=FindPos(k1);
if(info[i]==Active)
{
info[i]=Deleted;
CurrentSize--;
return true;
}
else return false;
};
template<class E,class K>
E HashTable<E,K>::Search(const K k1,E& e1)const
{
int i=FindPos(k1);
if(info[i]!=Active||ht[i]!=k1) return false;
e1=ht[i];
return e1;
};
template<class E,class K>
void HashTable<E,K>::makeEmpty()
{
for(int i=0;i<TableSize;i++)
info[i]=Empty;
CurrentSize=0;
};
#include"hashing.cpp"
int menu()
{
int choice;
cout<<" *************鏁e垪鍑芥暟鐨勫熀鏈搷浣?***********"<<endl<<endl;
cout<<" 鍦ㄦ暎鍒楄〃鎻掑叆鍏冪礌錛岃鎸?"<<endl;
cout<<" 閫昏緫鍒犻櫎鏁e垪琛ㄥ厓绱狅紝璇鋒寜2"<<endl;
cout<<" 鍦ㄦ暎鍒楄〃涓悳绱㈠叧閿爜鐨勫鹼紝璇鋒寜3"<<endl;
cout<<" 閫鍑猴紝璇鋒寜4"<<endl<<endl;
cout<<" *****************************************"<<endl<<endl;
cout<<" 璇烽夋嫨:";
cin>>choice;
return choice;
}
int main()
{
HashTable<int,int> hash(2,10);
bool exit=false;
while(true)
{
int choice=menu();
switch(choice)
{
case 1:
int s;
cout<<" 璇瘋緭鍏ヨ鎻掑叆鍊煎叧閿爜:";
cin>>s;
cout<<" "<<hash.Insert(s)<<endl;break;
case 2:
int c;
cout<<" 璇瘋緭鍏ヨ杈撳嚭鍊煎叧閿爜:";
cin>>c;
cout<<" "<<hash.Remove(c)<<endl;break;
case 3:
int y;
cout<<" 璇瘋緭鍏ヨ鏌ヨ鍊肩殑鍏抽敭鐮?";
cin>>y;
int z;
cout<<" "<<hash.Search(y,z)<<endl;break;
case 4:
exit=true;break;
}
system("pause");
system("cls");
if(exit==true)
break;
}
return 0;
}
]]>
#include<stdlib.h>
using namespace std;
template<class T>
struct BinTreeNode
{
T data;
BinTreeNode<T> *leftChild,*rightChild; //宸﹀彸瀛╁瓙鎸囬拡
BinTreeNode():leftChild(NULL),rightChild(NULL){}
BinTreeNode(T x,BinTreeNode<T> *l=NULL,BinTreeNode<T> *r=NULL):data(x),leftChild(l),rightChild(r){}
};
template<class T>
class BinaryTree
{
public:
// BinaryTree():root(NULL){}
BinaryTree():root(NULL){CreateBinTree(root);}
void PreOrder(){PreOrder(root);} //鍓嶅簭閬嶅巻
void inOrder(){inOrder(root);} //涓簭閬嶅巻
void postOrder(){postOrder(root);} //鍚庡簭閬嶅巻
protected:
BinTreeNode<T> *root; //浜屽弶鏍戠殑鏍圭粨鐐規寚閽?br>// void Print(BinTreeNode<T> *p); //杈撳嚭浜屽弶鏍戞瘡涓粨鐐圭殑鍊?br> void CreateBinTree(BinTreeNode<T> *&subTree);//鍒╃敤浜屽弶鏍戝墠搴忛亶鍘嗙敓鎴愪簩鍙夋爲
void PreOrder(BinTreeNode<T> *&subTree);
void inOrder(BinTreeNode<T> *&subTree);
void postOrder(BinTreeNode<T> *&subTree);
};
template<class T>
void BinaryTree<T>::CreateBinTree(BinTreeNode<T> *&subTree)
{
char value;
cin>>value;
if(value=='#') subTree=NULL;
else
{
subTree=new BinTreeNode<T>(value);
if(subTree==NULL)
{
cerr<<"鍐呭瓨鍒嗛厤閿欒!";
exit(1);
}
CreateBinTree(subTree->leftChild);
CreateBinTree(subTree->rightChild);
}
};
template<class T>
void BinaryTree<T>::PreOrder(BinTreeNode<T> *&subTree)
{
if(subTree!=NULL)
{
cout<<subTree->data<<" ";
PreOrder(subTree->leftChild);
PreOrder(subTree->rightChild);
}
};
template<class T>
void BinaryTree<T>::inOrder(BinTreeNode<T> *&subTree)
{
if(subTree!=NULL)
{
inOrder(subTree->leftChild);
cout<<subTree->data<<" ";
inOrder(subTree->rightChild);
}
};
template<class T>
void BinaryTree<T>::postOrder(BinTreeNode<T> *&subTree)
{
if(subTree!=NULL)
{
postOrder(subTree->leftChild);
postOrder(subTree->rightChild);
cout<<subTree->data<<" ";
}
};
--------------------------main.cpp----------------------------------
int menu()
{
int choice=0;
cout<<" ****************浜屽弶鏍戠粌涔?*****************"<<endl<<endl;
cout<<" 鍓嶅簭閬嶅巻杈撳嚭浜屽弶鏍戯紝璇鋒寜1:"<<endl;
cout<<" 涓簭閬嶅巻杈撳嚭浜屽弶鏍戯紝璇鋒寜2:"<<endl;
cout<<" 鍚庡簭閬嶅巻杈撳嚭浜屽弶鏍戯紝璇鋒寜3:"<<endl;
cout<<" 閫鍑鴻鎸?:"<<endl<<endl;
cout<<" ********************************************"<<endl<<endl;
cout<<" Please enter the number:";
cin>>choice;
return choice;
}
int main()
{
cout<<"鍓嶅簭閬嶅巻寤虹珛浜屽弶鏍?"<<endl;
BinaryTree<char> tree;
bool exit=false;
while(true)
{
int choice=menu();
switch(choice)
{
case 1:
tree.PreOrder();break;
case 2:
tree.inOrder();break;
case 3:
tree.postOrder();;break;
case 4:exit=true;break;
default:cout<<" 鎮ㄧ殑杈撳叆鏈夎錛岃閲嶆柊杈撳叆!";break;
}
system("pause"); //鏆傚仠
system("cls"); //娓呭睆
if(exit==true) break;
}
return 0;
}
]]>
#include<stdlib.h>
using namespace std;
template<class T>
struct CircLinkNode
{
T data;
CircLinkNode<T> *link;
CircLinkNode(CircLinkNode<T> *next=NULL):link(next){}
CircLinkNode(T d,CircLinkNode<T>*next=NULL):data(d),link(next){}
};
template<class T>
class CircList
{
public:
CircList(){first=new CircLinkNode<T>(1),first->link=first;}//瀹氫箟涓哄驚鐜摼琛?br> ~CircList(){}
CircLinkNode<T> *getHead()const{return first;}
CircLinkNode<T> *Locate(int &i);
bool Insert(int &i);
private:
CircLinkNode<T> *first;
};
template<class T>
CircLinkNode<T> *CircList<T>::Locate(int &i)
{
if(i<0) return NULL;
CircLinkNode<T> *current=first;
int k=2;
while(current!=NULL&&k<i)
{
current=current->link;
k++;
}
return current;
};
template<class T>
bool CircList<T>::Insert(int &i)
{
CircLinkNode<T> *current=Locate(i);
if(current==NULL) return false;
CircLinkNode<T> *newNode=new CircLinkNode<T>(i);
if(newNode==NULL)
{
cerr<<"瀛樺偍鍒嗛厤閿欒!"<<endl;
exit(1);
}
newNode->link=first;
current->link=newNode;
return true;
};
template<class T>
void Josephus(CircList<T>&Js ,int n,int m)
{
CircLinkNode<T> *p=Js.getHead(),*pre=NULL;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=1;j<m;j++)
{
pre=p;
p=p->link;
}
cout<<"鍑哄垪鐨勪漢鏄?/span>"<<p->data<<endl;
pre->link=p->link;
delete p;
p=pre->link;
}
};
int main()
{
CircList<int> clist;
int i,n,m;
cout<<"杈撳叆娓告垙浜烘暟鍜屾姤鏁拌呴棿闅? ";
cin>>n>>m;
for(i=2;i<=n;i++)
clist.Insert(i);
Josephus(clist,n,m);
return 0;
}
涓嬮潰鏄互鍓嶆病瀛︽暟鎹粨鏋勪箣鍓嶆墍鍐欑殑浠g爜
using namespace std;
int main()
{
int count=0;
int s=0;//璁板綍閫鍑虹殑浜虹殑涓暟
int i;
int N;
int key;
int a[100];
cout<<"娓告垙浜烘暟鍜屾暟瀛楀垎鍒槸:";
cin>>N>>key;
for(i=0;i<N;i++)
a[i]=i+1;
for(i=0;i<N;i++)
{
if(a[i]==-1)
{
if(i==N-1)//闃叉continue浣垮驚鐜鍑?br> i=-1;
continue;
}
count++;
if(count==key)
{
a[i]=-1;
s++;
count=0;
}
if(i==N-1)
i=-1;
if(s==N-1)
break;
}
cout<<"鐣欎笅鐨勪漢鏄?";
for(i=0;i<N;i++)
if(a[i]!=-1)
cout<<a[i];
cout<<endl;
return 0;
}
]]>
void YANGVI(int n)
{
LinkedQueue<int> q;
int k;
int i=1,j,s=k=0,t,u; //璁$畻涓嬩竴琛岀郴鏁版椂鐢ㄥ埌鐨勫伐浣滃崟鍏?br> q.EnQueue(i);q.EnQueue(i); //棰勫厛鏀懼叆絎竴琛岀殑涓や釜緋繪暟
for(i=1;i<=n;i++)
{
cout<<endl; //鎹㈣
q.EnQueue(k); //鍚勮闂存彃鍏ヤ竴涓?
for(j=1;j<=i+2;j++) //澶勭悊絎琲琛岀殑i+2涓郴鏁?鍖呮嫭涓涓?)
{
q.DeQueue(t); //璇誨彇涓涓郴鏁?br> u=s+t; //璁$畻涓嬩竴琛岀殑緋繪暟
q.EnQueue(u); //榪涢槦鍒?br> s=t; //姣忔璁板綍鍒氭墠鍑洪槦鍒楃殑鍊鹼紝渚夸簬涓庝笅嬈″嚭闃熷垪鐨勫肩浉鍔?br> if(j!=2+i) cout<<s<<' ';//鎵撳嵃涓涓郴鏁幫紝絎琲+2涓槸0
}
}
}
]]>
#include"Queue.h"
template<class T>
class LinkedQueue
{
public:
LinkedQueue():rear(NULL),front(NULL){}
~LinkedQueue(){makeEmpty();}
bool EnQueue(const T& x);
bool DeQueue(T& x);
bool getFront(T& x)const;
void makeEmpty();
bool IsEmpty()const{return(front==rear)?true:false;}
int getSize()const;
// bool IsFull()const{return((rear+1)%maxSize==front)?true:false;}
friend ostream& operator<<(ostream& os,LinkedQueue<T>& Q);
protected:
LinkNode<T> *front, *rear;
};
template<class T>
void LinkedQueue<T>::makeEmpty()
{
LinkNode<T> *p;
while(front!=NULL)
{
p=front;
front=front->link;
delete p;
}
};
template<class T>
bool LinkedQueue<T>::EnQueue(const T& x)
{
if(front==NULL)
{
front=rear=new LinkNode<T>(x);//絀洪槦鍒楁椂錛屾柊緇撶偣鎴愪負闃熷垪鐨勭涓涓粨鐐癸紝鏃㈡槸瀵瑰ご涔熸槸闃熷熬
if(front==NULL) return false;
}
else
{
rear->link=new LinkNode<T>(x);//闈炵┖鏃跺湪閾懼熬榪藉姞鏂扮殑緇撶偣騫舵洿鏂伴槦灝炬寚閽?br> if(rear->link==NULL) return false;
rear=rear->link;
}
return true;
};
template<class T>
bool LinkedQueue<T>::DeQueue(T& x)
{
if(IsEmpty()==true) return false;
LinkNode<T> *p=front;
x=front->data;
front=front->link;
delete p;
return true;
};
template<class T>
bool LinkedQueue<T>::getFront(T& x)const
{
if(IsEmpty()==true) return false;
x=front->data;
return true;
};
template<class T>
int LinkedQueue<T>::getSize()const
{
LinkNode<T> *p=front;
int k=0;
while(p!=NULL)
{
p=p->link;
k++;
}
return k;
};
template<class T>
ostream& operator<<(ostream& os,LinkedQueue<T>& Q)
{
os<<"闃熷垪涓殑鍏冪礌涓暟鏈?/span>"<<Q.getSize()<<endl;
LinkNode<T> *p=Q.front;
int i=0;
while(p!=NULL)
{
os<<++i<<":"<<p->data<<endl;
p=p->link;
}
return os;
}
]]>
#include<iostream.h>
#include<stdlib.h>
#include"Queue.h"
template<class T>
class SeqQueue
{
public:
SeqQueue(int sz=10);
~SeqQueue(){delete[]elements;}
bool EnQueue(const T& x);
bool DeQueue(T& x);
bool getFront(T& x);
void makeEmpty(){front=rear=0;}
bool IsEmpty()const{return(front==rear)?true:false;}
bool IsFull()const{return((rear+1)%maxSize==front)?true:false;}
friend ostream& operator<<(ostream& os,SeqQueue<T>& Q); //杈撳嚭閲嶈澆
protected:
int rear,front; //闃熷熬鎸囬拡涓庡澶存寚閽?br> T *elements;
int maxSize; //闃熷垪鏈澶у彲瀹圭撼涓暟
};
template<class T>
SeqQueue<T>::SeqQueue(int sz):front(0),rear(0),maxSize(sz)
{
elements=new T[maxSize];
assert(elements!=NULL);
};
template<class T>
bool SeqQueue<T>::EnQueue(const T& x)
{
if(IsFull()==true) return false; //闃熷垪婊★紝鎻掑叆澶辮觸
elements[rear]=x; //鎸夌収闃熷熬鎸囬拡鎸囩ず鎻掑叆浣嶇疆
rear=(rear+1)%maxSize; //闃熷熬鎸囬拡+1
return true;
};
template<class T>
bool SeqQueue<T>::DeQueue(T& x)
{
if(IsEmpty()==true) return false;
x=elements[front];
front=(front+1)%maxSize;
return true;
}
template<class T>
bool SeqQueue<T>::getFront(T& x)
{
if(IsEmpty()==true) return false;
x=elements[front];
return true;
};
template<class T>
ostream& operator<<(ostream& os,SeqQueue<T>& Q)
{
os<<"front="<<Q.front<<",rear="<<Q.rear<<endl;
for(int i=Q.front;i!=Q.rear;i=(i+1)%maxSize)
os<<i<<":"<<Q.elements[i]<<endl;
return os;
}
]]>
///////////////////
#include"LinkedStack.h"
#include<stdlib.h>
struct Node
{
long n;
int tag;
};
long Fibnacci(long n)
{
LinkedStack<Node> S;
Node *w=new Node; //鍒嗛厤鍔ㄦ佸唴瀛橈紝濡傛灉涓嶅垎閰嶅垯紼嬪簭閿欒
if(w==NULL)
{
cerr<<"鍒嗛厤鍐呭瓨澶辮!"<<endl;
exit(1);
}
long sum=0;
do
{
while(n>1) //涓嶆柇鐨勫皢緇撴瀯浣撳帇鍏ユ爤
{
w->n=n;
w->tag=1;
S.Push(*w);
n--;
}
sum=sum+n;
while(S.IsEmpty()==false)
{
S.Pop(*w);
if(w->tag==1)
{
w->tag=2;
S.Push(*w);
n=w->n-2;
break;
}
}
}while(S.IsEmpty()==false);
return sum;
}
]]>#include<iostream.h>
#include<string.h>
void Hanoi(int n,char A,char B,char C);
void main()
{
Hanoi(3,'A','B','C');
}
void Hanoi(int n,char A,char B,char C)
{
if(n==1)
cout<<"Move top disk from peg "<<A<<" to peg "<<C<<endl;
else
{
Hanoi(n-1,A,C,B);
cout<<"Move top disk from peg "<<A<<" to peg "<<C<<endl;
Hanoi(n-1,B,A,C);
}
}
]]>void PrintMatchedPairs(char *expression)//////////////////////////////////////////////////////////鎷彿鍖歸厤綆楁硶
{
linkedStack s;
int j,length=strlen(expression);
for(int i=1;i<=length;i++)
{
if(expression[i-1]=='(') s.Push(i);
else if(expression[i-1]==')')
{
if(s.Pop(j)==true)
cout<<j<<"涓?/span>"<<i<<"鍖歸厤"<<endl;
else
cout<<"娌℃湁涓庣"<<i<<"涓嫭鍙峰尮閰嶇殑宸︽嫭鍙?"<<endl;
}
}
while(s.isEmpty()==false)
{
s.Pop(j);
cout<<"娌℃湁涓庣"<<j<<"涓乏鎷彿鐩稿尮閰嶇殑鍙蟲嫭鍙?"<<endl;
}
}
鍒漢鍐欑殑浠g爜
int size=0; /* 鍏ユ爤涓暟 */
int PrintMatchedPairs(char *expression)
{
int i;
for(i=0;i<strlen(expression);i++)
{
char c=expression[i];
if(c=='('||c=='['||c=='{') /* 閬囧埌宸︽嫭鍙?nbsp; */
{
stack[size]=c; /* stack push */
size++;
}
else if(c==')') /* 閬囧埌鍙蟲嫭鍙?nbsp; */
{
if(size==0||stack[size-1]!='(') /* 媯鏌?nbsp; stack 鏈鍚庝竴涓槸鍚︽槸 '(' */
{
size=0;
return 0;
}
else
size--; /* stack pop */
}
else if(c==']')
{
if(size==0||stack[size-1]!='[') /* 媯鏌?nbsp; stack 鏈鍚庝竴涓槸鍚︽槸 '[' */
{
size=0;
return 0;
}
else
size--; /* stack pop */
}
else if(c=='}')
{
if(size==0||stack[size-1]!='{') /* 媯鏌?nbsp; stack 鏈鍚庝竴涓槸鍚︽槸 '{' */
{
size=0;
return 0;
}
else
size--; /* stack pop */
}
}
if(size==0)
return 1;
else
{
size=0;
return 0;
}
}
]]>