資料結構 迴圈鍊錶的相關操作

2021-08-17 01:59:59 字數 3190 閱讀 1160

#include#include/*結點的資料結構*/

typedef struct nodenode,* pnode;

/*迴圈鍊錶的資料結構*/

typedef struct linklistlinklist,* clinklist;

/*初始化迴圈鍊錶*/

bool initlist(clinklist &l)

l->head->next = l->head;//初始化head指標和tail指標,都指向頭結點

l->tail = l->head;

l->length = 0;

return true;

}/*頭插法建立迴圈鍊錶*/

void create_h(clinklist &l, int x)

else

++l->length;

printf("採用頭插法建立迴圈鍊錶,建立成功!!\n");

return; }}

/*尾插法建立迴圈鍊錶*/

void create_t(clinklist &l, int x)

else }

/*遍歷鍊錶*/

void showlist(clinklist l)

pnode s = (pnode)malloc(sizeof(node));

s = l->head->next;

printf("鍊錶的元素為:");

while (l->head != s)

printf("\n");

return;

}/*顯示尾結點的元素*/

void showtail(clinklist l)

/*對無序鍊錶進行排序*/

void sortlist(clinklist &l)

pnode p = l->head->next;

pnode q = p->next;

int temp = 0;

for (int i = 0; i < l->length - 1; i++, p = l->head->next, q = p->next)

}} return;

}/*在有序表中插入元素*/

void insert_val(clinklist &l, int x)

s->data = x;

q->next = s;

s->next = p;

if (l->head == p)//如果是在尾部插入,需改變尾指標和尾節點的next指向 }

/*查詢元素*/

pnode find(clinklist l, int x)

if (l->head == p->next)

return p;

}/*刪除指定元素的值*/

void del_value(clinklist &l, int x)

pnode p = (pnode)malloc(sizeof(node));

p = find(l, x);

pnode q = (pnode)malloc(sizeof(node));

q = null;

if (null != p)

else

free(q);

l->length--;

printf("%d已經刪除!!\n", x);

return;

} else }

/*刪除除頭結點外的所有結點的*/

void clear(clinklist &l)

l->tail = l->head;

l->head->next = l->head;

l->length = 0;

printf("鍊錶已被清空!!\n");

}/*摧毀鍊錶*/

void destroy(clinklist &l)

int main()

else

//建立鍊錶

printf("--------建立鍊錶\n");

printf("1-頭插法建立鍊錶,2-尾插法建立鍊錶\n");

int selection = 0;

int size = 0;

int value = 0;

printf("請輸入你的選擇以及建立鍊錶的長度:");

scanf("%d %d",&selection,&size);

switch (selection)

break;

case 2:

for (int i = 0; i < size; i++)

break;

default:

printf("你輸入的選擇有誤!!\n");

break;

} //輸出鍊錶的元素

printf("--------列印鍊錶\n");

showlist(l);

//顯示尾結點的元素

printf("--------列印尾部鍊錶元素\n");

showtail(l);

printf("\n");

//對鍊錶進行排序

printf("--------對鍊錶進行排序\n");

sortlist(l);

showlist(l);

//在有序鍊錶裡面插入資料

printf("--------有序鍊錶裡面插入資料\n");

printf("請輸入你要插入的元素的值:");

scanf("%d", &value);

insert_val(l, value);

showlist(l);

//查詢元素

printf("--------查詢元素\n");

printf("請輸入你要查詢的元素的值:");

scanf("%d", &value);

if (find(l, value))

else

//刪除指定元素

printf("--------刪除指定元素\n");

printf("請輸入你要刪除的元素的值:");

scanf("%d", &value);

del_value(l, value);

showlist(l);

//摧毀鍊錶

printf("--------摧毀鍊錶\n");

destroy(l);

system("pause");

return 0;

}

資料結構 迴圈鍊錶相關操作

include iostream include cstdlib using namespace std define true 1 define false 0 define ok 1 define error 0 typedef int elemtype typedef int status t...

資料結構(二)鍊錶的相關操作

以下是我在學習鍊錶及其相關介面操作時寫的 1.函式定義的 c 檔案 include linkedlist.h include include include 1.初始化 銷毀 void llistinit llist llist 2.頭插 void llistpushfront llist llis...

資料結構 迴圈鍊錶

近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cyclinklist.h ifndef cyclinklist h define cyclinklist h inclu...