线性表

c++很久没用了。。。好生疏阿。。。

#include using namespace std; typedef int ElemType; const int MaxNum=100; class List { public : ElemType list[MaxNum+1]; int size; void Clear(){ this->size=0; } int GetSize(){ return this->size; } bool isEmpty(){ if(this->size) return false; else return true; } ElemType GetElem(int pos) { if(0list[pos]; else { exit(1); } } bool find(ElemType& it) { int i; for(i=0;ilist[i]) return true; } return false; } bool update(int pos,const ElemType& it){ int i; for(i=0;ilist[i]){ this->list[i]=it; return true; } } return false; } bool InsertRear(const ElemType& it){ if(size>=MaxNum) return false; this->list[size]=it; size++; return true; } bool InsertFront(const ElemType& it){ int i; if(size>=MaxNum) return false; for(i=size;i>0;i--){ this->list[i]=this->list[i-1]; } this->list[0]=it; size++; return true; } bool Insert(int pos,const ElemType& it){ int i; if(size>=MaxNum) return false; for(i=size;i>pos;i--){ this->list[i]=this->list[i-1]; } this->list[pos]=it; size++; return true; } ElemType DeletFront(){ int i; if(size==0) exit(1); ElemType temp=this->list[0]; for(i=0;ilist[i]=this->list[i+1]; } return temp; } ElemType Delet(int pos){ int i; if(sizelist[pos]; for(i=pos;ilist[i]=this->list[i+1]; } return temp; } }; int main(int argc, char *argv[]) { List a; a.InsertFront(1); a.InsertRear(2); cout

拙劣之作,约瑟夫环循环链表解法

下学期的数据结构期末作业貌似要做这个,估计就是循环链表的模拟解法吧。。。
所以就凭着记忆写了一个比较简单的cpp版本。
大牛一笑哂之~

#include #include using namespace std; struct node{ int data; int index; node next,pre; }root,tail; void del(node* a) { node *p; p=a->pre; p->next=a->next; a->next->pre=p; coutindexdata=aas; aa->index=ind; aa->pre=tail; tail->next=aa; aa->next=root; tail=aa; root->pre=tail; } int main() { int i; int a; int n,m; m=4;n=6; cin>>m>>n; for(i=0;i>a; if(i){ add(a,i+1); }else{ root=new node; tail=root; root->data=a; root->index=i+1; root->next=tail; root->pre=tail; tail->next=root; tail->pre=root; } } node *tt; tt=root; while(n){ int kk=0; while(1) { kk++; if(kk==m) { m=tt->data; del(tt); tt=tt->next; break; }else { tt=tt->next; } } n--; } }

自己写的稳定婚姻匹配模板,测试过,可靠

以前写的婚配模板,测试了多个题目,挺可靠的,于是发出来共享~

//婚配问题 by 混沌的云Knight //传入男人数n,女人数m //男人对女人好感矩阵mtw,女人对男人好感矩阵wtm,匹配矩阵 //match1,match2 匹配成功返回1,否则返回0 //match1,match2返回一个成功婚姻匹配,未匹配顶点match值为-1 #include #define MAXN 502 #define clr(x) memset(x,0xff,sizeof(int)*MAXN) char W[MAXN][MAXN]; int _O[MAXN]; int marry(int n,int m,int mtw[][MAXN],int wtm[][MAXN],int *match1,int *match2) { int i=0,j,h,M,t=-1,s1=n,s2=m; memset(W,0,sizeof(W)); for(clr(match1),clr(match2);i=0) { h=O[t--]; for(M=-1,i=0;imtw[h][M])) M=i; W[h][M]=1; if(match2[M]==-1) { match1[h]=M; match2[M]=h; s1--;s2--; }else if(wtm[M][h]>wtm[M][match2[M]]) { match1[match2[M]]=-1; _O[++t]=match2[M]; match1[h]=M; match2[M]=h; }else _O[++t]=h; } return (!s1)||(!s2); }

发一个最小圆的模板,顺便测试code

#include #include #include const int maxn = 501; const double eps = 1e-6; struct TPoint { double x, y; TPoint() { x=y=0; } TPoint operator-(TPoint &a) { TPoint p1; p1.x = x - a.x; p1.y = y - a.y; return p1; } }; struct TCircle { double r; TPoint centre; TCircle() { r=0; centre.x=centre.y=0; } }; struct TTriangle { TPoint t[3]; TTriangle() { int i; for(i=0;i c.r) { ce.t[tce] = a[i]; MinCircle(i - 1, tce + 1, ce); tmp = a[i]; for(j = i;j >= 2;j--) { a[j] = a[j - 1]; } a[1] = tmp; } } } void run(int n) { TTriangle ce; int i; MinCircle(n, 0, ce); printf("%.2lf\n", c.centre.x, c.centre.y, c.r);// 输出部分 } int main() { int n; while(scanf("%d", &n) != EOF && n) { for(int i = 1;i