1 #include <iostream> 2 using namespace std; 3 int defaultSize; 4 template <typename E> 5 class AList{ 6 private: 7 int maxsize; 8 int listsize; 9 int curr; 10 E *listArray; 11 public: 12 AList(int size=defaultSize){ 13 maxsize = size; 14 listsize = curr = 0; 15 listArray = new E[maxsize]; 16 } 17 void clear(){ 18 delete [] listArray; 19 listsize=curr=0; 20 listArray =new E [maxsize]; 21 } 22 23 void insert(const E &it){ 24 if(listsize>maxsize) cout<<"List capacity exceed"; 25 for(int i=listsize;i>curr;i--){ 26 listArray[i] = listArray[i-1];} 27 listArray[curr]=it; 28 listsize++; 29 } 30 31 void append(const E &it){ 32 if(listsize>maxsize) cout<<"List capacity exceed"; 33 listArray[listsize++]=it; 34 } 35 36 E remove(){ 37 if(curr<0 || curr>listsize) cout<<"wrong number"; 38 E it=listArray[curr]; 39 for(int i=curr;i<listsize-1;i++){ 40 listArray[i]=listArray[i+1]; 41 } 42 listsize--; 43 return it; 44 45 } 46 int length() const {return listsize;} 47 int currpos() const {return curr;} 48 void movetopos(int pos){ curr=pos;} 49 const E& getvalue(int i){ 50 if(i>(listsize+1) || i<0) cout<<"wrong number"; 51 return listArray[i-1]; 52 } 53 int locate(const E &it){ 54 curr=0; 55 while(listArray[curr]!=it){ 56 curr++; 57 } 58 return curr+1; 59 } 60 void merge(AList L,AList L1){ 61 L1.curr=0; 62 while(L1.listsize!=0){ 63 L.append(L1.listArray[L1.curr]); 64 L1.curr++; 65 L1.listsize--; 66 } 67 L.display(); 68 } 69 void display(){ 70 int curr=0; 71 while(curr!=listsize){ 72 cout<<listArray[curr]<<" "; 73 curr++; 74 } 75 }; 76 }; 77 void main(){ 78 AList<char> L(100),L1(100); 79 L.append('a');L.append('b');L.append('c');L.append('d'); 80 cout<<"创建顺序表1: "; 81 L.display(); 82 int ans=L.locate('a'); 83 cout<<endl<<"值为a在表中的位置: "<<ans; 84 char ans1=L.getvalue(4); 85 cout<<endl<<"位置4的值为: "<<ans1; 86 cout<<endl<<"删除第二个节点后顺序表为:"; 87 L.movetopos(1); char val=L.remove(); 88 L.display(); 89 L1.append('h');L1.append('i');L1.append('j');L1.append('k'); 90 cout<<endl<<"创建顺序表2 : "; 91 L1.display(); 92 cout<<endl<<"合并后的顺序表: "; 93 L.merge(L,L1); 94 cout<<endl; 95 system("pause"); 96 };
1 #include <iostream> 2 using namespace std; 3 template <typename E> 4 class Link{ 5 public: 6 E data; 7 Link *next; 8 Link(const E& elemval,Link* nextval=NULL){data=elemval;next=nextval;} 9 Link(Link* nextval=NULL){next=nextval;} 10 }; 11 template <typename E> 12 class LList{ 13 private: 14 Link<E> *head; 15 Link<E> *tail; 16 Link<E> *curr; 17 int cnt; 18 void create(){ 19 curr=head=tail=new Link<E>; 20 cnt=0; 21 } 22 void removeall(){ 23 while(head!=NULL){ 24 curr=head; 25 head=head->next; 26 delete curr; 27 } 28 } 29 public: 30 LList(E* A,int n){ 31 create(); 32 for(int i=0;i<n;i++){ 33 append(A[i]); 34 } 35 } 36 void clear(){ removeall(); create();} 37 void insert(const E& it){ 38 curr->next=new Link<E>(it,curr->next); 39 if(tail==curr){ tail=curr->next;} 40 cnt++; 41 } 42 43 void append(const E it){ 44 tail=tail->next=new Link<E>(it,NULL); 45 cnt++; 46 } 47 48 E remove(){ 49 if(curr->next==NULL) cout<<"NO element"; 50 E it=curr->next->element; 51 Link<E>* temp=curr->next; 52 if(tail==curr->next){tail=curr;} 53 curr->next=curr->next->next; 54 delete temp; 55 cnt--; 56 return it; 57 } 58 void movetostart(){ curr=head;} 59 int currPos() const{ 60 Link<E> *temp=head; 61 for(int i=0;temp!=curr;i++){ 62 temp=temp->next; 63 } 64 return i; 65 } 66 const E getvalue(int i){ 67 Link<E> *temp=head; 68 for(int j=0;j<i;j++){ 69 temp=temp->next;} 70 return temp->data; 71 } 72 int locate(E it){ 73 curr=head; 74 for(int i=0;curr->next!=NULL;i++){ 75 if(curr->data==it) return i+1; 76 curr=curr->next; 77 } 78 } 79 void sort(){ 80 Link<E> *p=head,*q; 81 for(p->next;p-next!=NULL;p = p->next){ 82 for(q=p->next;q;q = q->next){ 83 if(p->data>q->data){ 84 E temp; 85 temp=q->data; 86 q->data=p->data; 87 p->data=temp; 88 } 89 } 90 } 91 92 } 93 void display(){ 94 curr=head; 95 while(curr->next!=NULL){ 96 cout<<curr->data<<" "; 97 curr=curr->next; 98 } 99 }; 100 };
约瑟夫问题:
1 #include<iostream> 2 using namespace std; 3 4 class Node{ 5 public: 6 Node(int data):data(data),link(NULL){} 7 int data; 8 Node *link; 9 }; 10 class Josephus{ 11 public: 12 Josephus(int N, int K, int M):N(N),K(K),M(M) 13 { 14 createList(); 15 outputList(); 16 } 17 protected: 18 void createList(); 19 void outputList(); 20 private: 21 Node *m_pHead;//循环链表的头节点 22 int N; //链表节点个数 23 int K; //第一个报数猴子的序号 24 int M; //报数出局的数 25 }; 26 void Josephus::createList(){ 27 Node *pre = NULL; 28 Node *cur = NULL; 29 Node *p = new Node(1); 30 m_pHead = p; 31 cur = p; 32 for (int i=2; i<=N; i++) 33 { 34 p = new Node(i); 35 pre = cur; 36 cur = p; 37 pre->link = cur; 38 } 39 cur->link = m_pHead; 40 int n=N; 41 p = m_pHead; 42 } 43 void Josephus::outputList() 44 { 45 Node *pre = NULL; 46 Node *cur = m_pHead; 47 K--; 48 while (K--) 49 { 50 pre = cur; 51 cur = cur->link; 52 } 53 cout<<"依次出列的猴子编号:"; 54 while (N--) 55 { 56 int s = M-1; 57 while (s--) 58 { 59 pre = cur; 60 cur = cur->link; 61 } 62 Node *p = cur; 63 if(N>=1) 64 cout << p->data << ","; 65 if(N==0) 66 { 67 cout<<p->data<<endl; 68 cout<<"大王是:"<<p->data<<endl; 69 } 70 cur = cur->link; 71 pre->link = cur; 72 delete p; 73 p=NULL; 74 } 75 } 76 void main(){ 77 Josephus(5,2,3); 78 system("pause"); 79 }