// 此**僅供個人學習之用
singlelinkedlist
// singlelinkedlist.h
#ifndef singlelinkedlist_h_h
#define singlelinkedlist_h_h
templateclass listnode;
templateclass list
~list();
bool insert(t,int); // 安值和位置插入
bool push_back(t); // 接在鍊錶隊尾之後
bool push_front(t);// 插在煉表頭之前
bool remove(int index); // 按索引刪除值
void remove_front(); // 從頭部移出
void print_list(); // 輸出鍊錶
bool is_empty()
void reverse(); // 反轉鍊錶
int get_length();
list& operator + (list& );
private:
listnode* _first,* _back;
bool is_index(int index); // 索引是否合法 };
templateclass listnode
private:
t data;
listnode * next; // 下一結點的指標};
#endif
// singlelinkedlist
.cpp
#ifndef singlelinklist_cpp
#define singlelinklist_cpp
#include "singlelinkedlist.h"
#include
using std::cout;
using std::endl;
templatebool list::push_back(t t)
_back->next = temp;
_back = temp;
return true; }
templatebool list::push_front(t t)
temp->next = _first;
_first = temp;
return true; }
templatebool list::insert(t t,int index)
int i = get_length();
if(index<0 || index>= i )
if( index == 0 || index == (i-1) )
listnode* new_node,*temp ;
new_node= new listnode( t );
if( !new_node )
return false;
// 插入在temp的後面
temp = _first;
while (index--)
temp = temp->next;
new_node->next = temp->next;
temp->next = new_node;
return true;
}
templateint list::get_length()
return len; }
templatevoid list::reverse()
}templatevoid list::remove_front()
templatebool list::remove(int index)
listnode* temp = _first;
listnode* ft;
do while( --index);
// 刪除最後乙個結點
if ( index == (get_length() -1) )
// 刪除普通結點
ft->next = temp->next;
delete temp;
return true; }
templatelist::~list()
} }
templatevoid list::print_list()
listnode* temp = _first;
while( temp != 0 )
cout << endl; }
templatebool list::is_index(int index)
#endif
模板迴圈鍊錶解決josephus問題
// circlelist.h
#ifndef circlelist_h_h
#define circlelist_h_h
templateclass circlelist;
templateclass cirlistnode
private:
t data;
cirlistnode * next;
};templateclass circlelist
bool is_empty()
void insert(t d);
void remove(); // 移出當前結點
void next() // 移動到下一結點
t getdata()
private:
cirlistnode* first, * current, * last,* front;
};#endif
// circlelist
.cpp
#include "circlelist.h"
templatevoid circlelist::insert(t d)
cirlistnode* temp = new cirlistnode( d );
temp->next = current->next;
current->next = temp;
current = temp;
} templatevoid circlelist::remove()
#include
#include "circlelist.h"
#include "circlelist.cpp"
using namespace std;
templatevoid josephus ( int n, int m ,circlelist& clist ) ;
void main ( )
// n 小孩數量,m 步長
templatevoid josephus ( int n, int m ,circlelist& clist )
cout << "no."<< clist.getdata() << " boy win/n"; }
//
Josephus問題 用迴圈鍊錶解決
1.剛剛學鍊錶,因此這裡特地用迴圈鍊錶解決此問題。2.具體程式如下 joseph環問題 n個人排隊,以m報數,直到只剩1人,輸出此人編號 用迴圈鍊錶解決問題 include includeint n,m int i,k 建立結構體 struct student void main else p1 h...
約瑟夫問題,用java單鏈表解決
設編號為1,2,3.n,的n個人圍坐一圈,約定編號為k 1的人從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的人又出列,以此類推,直到所有人出列為止,由此產生乙個出隊編號的序列 由k節點起從1開始計數,計到m時,對應節點從鍊錶中刪除,然後再從被刪除節點的下乙個節點 又從1開始計數...
迴圈單鏈表解決迴圈報數問題
有n n 1 個人圍成一圈迴圈報數,每次報到3就出列,剩下的人繼續從1開始報數,直至只剩乙個人,求剩下那乙個人的原始編號。include using namespace std typedef struct node linklist void baoshu int m r next l 尾節點指向...