模擬單鏈表的實現方法,這裡我用乙個簡單案例來實現一下迴圈鍊錶的基本功能:
1.用前插法建立乙個迴圈鍊錶
假設依次放入 1,2,3,4,5,那麼其內部儲存方式應為 5,4,3,2,1 。後插法我就不寫了,和前插法一樣的,只是儲存方式是正序,可以自己實現一下。
2.在第1個位置插入 6
3.查詢 3和 7是否在單鏈表中
4.取出第 2個位置的元素
5.刪除第乙個位置的元素
基本實現操作和單鏈表類似,只需要將p != null或p->next != null的判別條件改為p != l或p->next != l即可,另外一些細節適當修改即可。如果不是特別理解的話可以先去講單鏈表搞明白再來對比實現迴圈鍊錶,單鏈表的實現:
#includetypedef int status;
using namespace std;
typedef struct lnodelnode,*linklist;
//初始化
status initlist(linklist &l)
//取值
status getelem(linklist l,int i,int &e)
if(idata;
return 1;
} //查詢
lnode *locateelem(linklist l,int e)
return p;
} //插入
status listinsert(linklist &l,int i,int e)
if(i-1data = e;
s->next = p->next;
p->next = s;
return 1;
} //刪除
status listdelete(linklist &l,int i)
if(i-1next==l))
return 0;
lnode *q = p->next;
p->next = q->next;
delete q;
return 1;
} //建立迴圈鍊錶 (前插法)
void createlist_h(linklist &l,int n)
}//建立迴圈鍊錶(後插法)
void createlist_r(linklist &l,int n)
}//列印函式
void printlist(linklist l)
cout<>n;
linklist l;
printf("請輸入%d個數:",n);
//前插法建立乙個長度為 n的迴圈鍊錶
createlist_h(l,n);
printlist(l);
//在第乙個位置插入6
cout<<"請選擇你要插入元素的位置和數值:";
cin>>n>>e;
if(listinsert(l,n,e))
else
cout<<"你輸入的位置越界!"
}
迴圈鍊錶的實現
1.標準的迴圈鍊錶與一般鍊錶多了個游標,多了3個游標操作函式。2.迴圈鍊錶api的寫法與一般鍊錶大致一樣,只有0號節點的增加和刪除需要注意,還有一次節點的插入和最後乙個節點的刪除需要注意,刪除時光標的移動需要注意。3.迴圈鍊錶相對於一般鍊錶並無多大效能上的增強,只是讓鍊錶解決約瑟夫問題十分方便。ci...
雙向迴圈鍊錶的實現
其實雙向迴圈鍊錶與單鏈表的區別在於每個節點的結構發生了改變,具體的說是,每個節點多了乙個指標域,用於指向上乙個節點。其他的如鍊錶物件就不需要進行改變了。新的節點類 class lnode def init self,elem 0,prev none,next none self.prev prev ...
迴圈鍊錶的簡單實現
這裡實現的是設定尾指標的迴圈鍊錶,並帶有頭節點。include include include typedef int celemtype using namespace std typedef struct cnode cnode,clinklist 初始化迴圈鍊錶,設立尾指標c bool ini...