迴圈鍊錶和雙鏈表

2021-08-21 03:35:37 字數 1205 閱讀 3960

1、假設在長度大於1的單迴圈鍊錶中,既無頭結點也無頭指標。s為指向某個結點的指標,試編寫演算法刪除結點*s的直接前驅結點。

2、已知由單鏈表表示的線性表中,含有三類字元的資料元素(如:字母、數字和其它字元),設計演算法構造三個以迴圈鏈表示的線性表,使每乙個表中只含同一類的字元,且利用原表中的結點空間作為這三個表的空間。(頭結點可以另闢空間)

3、有一雙鍊錶,每個結點中除有prior、data和next域外,還有一訪問頻度域freq,在鍊錶被啟用前,其值均初始化為零。每當在鍊錶上進行一次locate(l,x)運算,元素值為x的結點中freq域的值增1,並使此鍊錶中結點保持按freq遞減的順序排列,以便使頻繁訪問的結點總是靠近表頭。設計滿足上述要求的locate演算法。

#include

#include

#include

using namespace std;

typedef struct clist//迴圈鍊錶結構體

clist,*clinklist;

int initlist(clinklist &l)//初始化迴圈鍊錶

void create(clinklist &l,int num)

if(num==2)//建立單鏈表

else//建立迴圈鍊錶

}void print(clinklist &l)

while(r!=l);

cout<>x;

while(s->data!=x) s=s->next;

p=s;//找到要刪結點的後繼

while(p->next->next!=s)

p=p->next;

if(p->next==l)

l=l->next;

q=p->next;

p->next=s;

delete q;

}void text1()

else if((p->data>=65&&p->data<=90)||(p->data>=97&&p->data<=122))

else

}if(a_a)

void bprint(blinklist &b)

cout<>x)//尾插法

bprint(b);

}void locate(blinklist &b,int x)

if(flag)

void text3()

}void menu()}}

int main()

雙鏈表 迴圈鍊錶

一 雙鏈表 對於雙鏈表,採用類似於單鏈表的型別定義,其dlinklist型別的定義如下 typedef struct dnode 宣告雙鏈表節點型別 dlinklist 1.建立雙聯表 1 頭插法 void createlistf dlinklist l,elemtype a,int n 頭插法建立...

雙鏈表和迴圈鍊錶小結

特點 方便查詢乙個節點的前,後相鄰節點 1 已知某個節點的位址,刪除他的時間o 1 修改p節點前驅節點的next指標和p節點後繼節點是prior指標 p prior next p next p next prior p prior 2 在某個節點的前後插入乙個節點的時間為o 1 2.迴圈鍊錶 1.迴...

迴圈鍊錶 迴圈雙鏈表 迴圈單鏈表

迴圈單 雙鏈表,建立 初始化 尾插 頭插 遍歷 插入 刪除 判空 部分函式採用過載 此處為c include include include using namespace std typedef struct lnodelnode,linklist typedef struct dnodednod...