不知道哪里错了,总是生成不出来,把创建pai_wash那一行注释掉就生成出来了。
main
#include<iostream>
using namespace std;
#include <string>
#include<ctime>
#include"1.h"
#include"List.h"
//判断随机数不重复
int numGen[54];
bool isGenerated(int newNum)
{
for(int i=0;i<54;i++)
{
if(numGen[i]==newNum)
return true;
}
return false;
}
int main()
{
List<string> pai_wash;
string pai[54];
string num[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
string type[4]={"红桃","梅花","方片","黑桃"};
int k=0;
for(int i=0;i<13;i++)
for(int j=0;j<4;j++)
pai[k++]=type[j]+num[i];
pai[52]="大王";
pai[53]="小王";
srand(time(NULL));
int newNum=rand()%54;
for(int i=0;i<54;i++)
{
if(!isGenerated(newNum))
{
pai_wash.insertAsFist(pai[newNum]);
numGen[i]=newNum;
newNum=rand()%54;
}
else
{
i--;
newNum=rand()%54;
}
}
return 0;
}
ListNode.h
#ifndef __ListNode_H__
#define __ListNode_H__
#include <iostream>
using namespace std;
#define Posi(T) ListNode<T>*
typedef int Rank;
//结点
template <typename T>
struct ListNode{
T data;
Posi(T) pred;
Posi(T) succ;
ListNode() {};
ListNode (T e,Posi(T) p=NULL,Posi(T) s=NULL)
{
data=e;pred=p;succ=s;
}
Posi(T) insertAsSucc(T const &e);
Posi(T) insertAsPred(T const &e);
};
//后插入
template <typename T>
Posi(T) ListNode<T>::insertAsSucc(T const &e)
{
Posi(T) x=new ListNode(e,this,succ);
succ->pred=x;succ=x;
return x;
}
//前插入
template <typename T>
Posi(T) ListNode<T>::insertAsPred(T const &e)
{
Posi(T) x=new ListNode(e,pred,this);
pred->succ=x;pred=x;
return x;
}
#endif
List.h
#ifndef __List_H__
#define __List_H__
#include"ListNode.h"
//列表,玩家
template<typename T>
class List{
private:
int _size;
Posi(T) header;
Posi(T) trailer;
public:
List(){Init();}
~List();
void Init();
Posi(T) insertA(Posi(T) p,T const &e);
Posi(T) insertB(Posi(T) p,T const &e);
Posi(T) insertAsFist(T const &e);
void show();
};
//初始化
template<typename T>
void List<T>::Init()
{
header=new ListNode<T>;
trailer=new ListNode<T>;
header->succ=trailer;header->pred=NULL;
trailer->pred=header;trailer->succ=NULL;
_size=0;
}
//首节点插入
template<typename T>
Posi(T) List<T>::insertAsFist(T const &e)
{
_size++;
return header->insertAsSucc(e);
}
//后插入
template<typename T>
Posi(T) List<T>::insertA(Posi(T) p,T const &e)
{
_size++;
return p->insertAsSuccc(e);
}
//前插入
template<typename T>
Posi(T) List<T>::insertB(Posi(T) p,T const &e)
{
_size++;
return p->insertAsPred(e);
}
//展示
template<typename T>
void List<T>::show()
{
Posi p=header;;
while(p)
{
cout<<p->data<<" ";
p->succ;
}
}
#endif