004 資料結構與演算法 線性表 單向迴圈鍊錶

2021-10-05 03:34:37 字數 1950 閱讀 4793

目錄

迴圈鍊錶 特點

迴圈鍊錶的兩種狀態

定義結點

1.1 迴圈鍊錶建立

1.2 遍歷迴圈鍊錶

1.3 迴圈鍊錶插入資料

1.4 迴圈鍊錶刪除元素

1.5 迴圈鍊錶查詢值

特點是表中最後乙個結點的指標域指向頭結點(首元節點),整個鍊錶形成乙個環。

空表,頭結點的指標域指向自己的資料域,資料域為空

非空表,最後乙個結點的指標域指向頭結點(首元節點)

//定義結點

typedef struct nodenode;

typedef struct node * linklist;

/*

2種情況:① 第一次開始建立; ②已經建立,往裡面新增資料

1. 判斷是否第一次建立鍊錶

yes->建立乙個新結點,並使得新結點的next 指向自身; (*l)->next = (*l);

no-> 找鍊錶尾結點,將尾結點的next = 新結點. 新結點的next = (*l);

*/status createlist(linklist *l)

else

}return ok;

}status createlist2(linklist *l)

//第一次建立

if(*l == null)else

}return ok;

}

迴圈鍊錶的遍歷最好用do while語句,因為頭節點就有值

void show(linklist p)

elsewhile (temp != p);

printf("\n");

}}

status listinsert(linklist *l, int place, int num)

temp->data = num;

for (target = *l; target->next != *l; target = target->next);

temp->next = *l;

target->next = temp;

*l = temp;

}else

temp->data = num;

for ( i = 1,target = *l; target->next != *l && i != place - 1; target = target->next,i++) ;

temp->next = target->next;

target->next = temp;

}return ok;

}

status  linklistdelete(linklist *l,int place)

//②.鍊錶還有很多資料,但是刪除的是首結點;

//1. 找到尾結點, 使得尾結點next 指向頭結點的下乙個結點 target->next = (*l)->next;

//2. 新結點做為頭結點,則釋放原來的頭結點

for (target = *l; target->next != *l; target = target->next);

temp = *l;

*l = (*l)->next;

target->next = *l;

free(temp);

}else

return ok;

}

int findvalue(linklist l,int value)

//當尾結點指向頭結點就會直接跳出迴圈,所以要額外增加一次判斷尾結點的data == value;

if (p->next == l && p->data != value)

return i;

}

資料結構與演算法 線性表

概念 一種資料結構,每個結點最多只有乙個前驅結點和乙個後繼結點 類別 順序表 定長 鍊錶 變長 棧 棧頂刪除 彈棧 棧頂插入 壓棧 後進先出 lifo 佇列 隊頭刪除 出隊 隊尾插入 入隊 先進先出 fifo 線性表的抽象資料型別定義 c 1.template2.class list 棧的抽象資料型...

資料結構與演算法 線性表

n維向量 x1,x2,xn 是乙個長度為n的線性表 英文小寫字母表 a,b,c,z 是乙個長度為26的線性表 一年中的四個季節 春,夏,秋,冬 是乙個長度為4的線性表 矩陣是乙個比較複雜的線性表 學生情況登記表是乙個複雜的線性表 由若干資料項組成的資料元素稱為記錄 由多個記錄構成的線性表又稱為檔案 ...

資料結構與演算法 線性表

1.線性表 1.1 線性表的定義和基本運算 定義 線性表是具有相同資料型別的n個資料元素的有限序列。除表頭元素外,每個元素有且僅有乙個直接前驅 除表尾元素外,每個元素有且僅有乙個直接後繼。特點 個數有限 具有邏輯上的順序性 資料元素型別都相同。基本操作 初始化 求表長 按值查詢 按位查詢 插入 刪除...