基本数据结构----循环链表
生活随笔
收集整理的這篇文章主要介紹了
基本数据结构----循环链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
循環鏈表是一種鏈式存儲結構,它的最后一個節點指向頭結點,形成一個環。因此,從循環鏈表中的任何一個結點出發都能找到任何其他結點。循環鏈表的操作和單鏈表的操作基本一致,差別僅僅在于算法中的循環條件有所不同。
?
#include<iostream> #include<malloc.h> using namespace std; typedef char ElemType; typedef struct Lnode //節點類型 {ElemType data;struct Lnode *next; }LinkList; void InitList(LinkList *&L) //初始化鏈表 {L = (LinkList *)malloc(sizeof(LinkList));L->next = L; } void DestroyList(LinkList *&L) {LinkList *p = L,*q = p->next;while(q != NULL){free(p);p = q;q = q->next;}free(p); } int ListEmpty(LinkList *L) {return (L->next == L); } int ListLength(LinkList *L) //返回鏈表長度 {LinkList *p = L;int i = 0;while(p->next != L){i++;p = p->next;}return i; } void DisplayList(LinkList *L) {LinkList *p = L->next;while(p != L){cout << p->data <<" ";p = p->next;}cout << endl; } int GetElem(LinkList *L, int i ,ElemType &e) {int j = 0;LinkList *p;if(L->next != L){if(i==1){e = L->next->data;return 1;}else{p = L->next;while(j<i-1&&p!=L){j++;p = p->next;}if(p==L)return 0;else{e = p->data;return 1;}}}elsereturn 0; }int LocateElem(LinkList *L,ElemType e) {LinkList *p = L->next;int n =1;while(p != L && p->data != e){p = p->next;n++;}if(p==L)return 0;elsereturn n; } int ListInsert(LinkList *&L,int i,ElemType e) {int j = 0;LinkList *p = L,*s;if(p->next ==L || i==1){s = (LinkList *)malloc(sizeof(LinkList));s->data = e;s->next = p->next;p->next = s;return 1;}else{p = L->next;while(j<i-2 && p !=L){j++;p = p->next;}if(p == L)return 0;else{s = (LinkList *)malloc(sizeof(LinkList));s->data = e;s->next = p->next;p->next = s;return 1;}} } int ListDelete(LinkList *&L,int i,ElemType &e) {int j = 0;LinkList *p = L, *q;if(L->next != L){if(i==1){q = L->next;L->next = q->next;free(q);return 1;}else{p = L->next;while(j<i-2&&p!=L){j++;p = p->next;}if(p==L)return 0;else{q = p->next;p->next = q->next;free(q);return 1;}}}elsereturn 0; }int main() {LinkList *L;ElemType e;cout << "(1)初始化鏈表L: \n";InitList(L);cout << "(2)插入法建立鏈表:\n";ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');cout << "(3)輸出單鏈表L:";DisplayList(L);cout << "(4)單鏈表長度: ";cout << ListLength(L) <<endl;cout << "(5)單鏈表L是:" << (ListEmpty(L)?"空":"非空") <<endl;GetElem(L,3,e);cout << "(6)單鏈表L的第三個元素是:" << e << endl;cout << "(7)元素a的位置是:" << LocateElem(L,'a') <<endl;cout << "(8)在第四個位置插入元素f";ListInsert(L,4,'f');cout << "(9)輸出鏈表L:";DisplayList(L);cout << "(10)刪除第三個元素\n";ListDelete(L,3,e);cout << "(11)輸出單鏈表L:";DisplayList(L);cout << "(12)釋放單鏈表L:\n";DestroyList(L); return 0; }
轉載于:https://www.cnblogs.com/theast/archive/2013/05/08/3067038.html
總結
以上是生活随笔為你收集整理的基本数据结构----循环链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: auto_ptr
- 下一篇: 为什么疫情之后房价又开始暴涨呢