鍊錶是一種儲存結構,用來儲存資料元素。它是由若干個節點組成,而所存資料的邏輯順序是和節點順序一樣的。在鍊錶中,每乙個節點都是由資料域和指標域所構成,資料域存放的是該節點的資料元素,指標域存放的是該節點後乙個節點的位址。這樣做的好處是,相鄰的資料在儲存單元可以是連續的,也可以是不連續的,在查詢資料元素時,也比順序表效率高了很多。
typedef int datatype;
typedef struct node //結點型別的建立
node,*pnode,list,*plist;
鍊錶一些常見的使用如下
void initlinklist(plist* pplist)else
*pplist = null;
}return;
}
pnode buynode(datatype d)
void destroylinklist(plist* pplist)*pplist = null;
return;
}
void pushback(plist* pplist, datatype d)while (cur->next)
cur->next = buynode(d);
return;
}
void printlinklist(plist* pplist)printf("\n");
return;
}
void popback(plist* pplist)else if (cur->next == null)
else
free(cur->next);
cur->next = null;
}return;
}
void pushfront(plist* pplist, datatype d)else
return;
}
void popfront(plist* pplist)else if ((*pplist)->next == null)
else
return;
}
pnode find(plist plist, datatype d)cur = cur->next;
}return null;
}
void insert(plist* pplist, pnode pos, datatype d)new->next = pos->next;
pos->next = new;
pos->data = d;
return;
}
void erase(plist* pplist, pnode pos)cur->data = cur->next->data;
free(cur->next);
cur->next = null;
return;
}
void remove(plist* pplist, datatype d)cur = cur->next;
}return;
}
void removeall(plist* pplist, datatype d)cur = cur->next;
}return;
}
void erasenottailnode(pnode pos)
int getlistlength(plist plist)return i;
}
void printtailtohead(plist plist) // 從未到頭列印單鏈表(遞迴)
pnode jc(plist* pplist, int num) //單鏈表實現約瑟夫環cur->next = cur1;
while (cur1->next != cur1)
cur1 = cur;
cur= cur1->next;
cur1->data = cur->data;
cur1->next = cur->next;
free(cur);
}return cur1;
}
void reverselist(plist* pplist) //逆置單鏈表*pplist = cur1;
return;
}
void bubblesort(plist * pplist) // 單鏈表排序(冒泡)while (cur1->next != cur)
cur2 = cur2->next;
}cur = cur2;
}return;
}
pnode merge(plist* list1, plist* list2) //合併兩個有序單鏈表else
cur11 = cur1->next;
cur = cur1;
while (cur2 != null && cur11 != null)
else
}if (cur1->next == null)
return cur;
}
pnode findmidnode(plist* head) //查詢單鏈表的中間節點,遍歷一遍return cur1;
}
pnode checkcycle(plist plist)cur1 = plist->next;
cur2 = plist->next->next;
while (cur1 != cur2)
cur1 = cur1->next;
cur2 = cur2->next->next;
}cur1 = plist;
while (cur1 != cur2)
return cur1;
}
結構體的常見使用方法(struct)和鍊錶的學習
在c語言中,結構體 struct 指的是一種資料結構,是c語言中復合資料型別 aggregate data type 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員 member 且這些成員可以為不同的型別,成員一般用名...
資料結構 鍊錶常見題目
include bool insert last list ls,data data tmp next node return true void display list ls printf n list createlist 建立鍊錶 ls head next null 空鍊錶 return l...
資料結構 鍊錶及常見操作
鍊錶最常見的結構有單鏈表,雙鏈表和迴圈鍊錶 單鏈表只有乙個方向,結點只需要乙個額外的空間指向後面的結點,只能從前往後進行遍歷查詢資料 而雙向鍊錶可以向前和向後查詢資料,相對比較靈活,但是雙向鍊錶需要額外的兩個空間來儲存後繼結點和前驅結點的位址 儲存同樣多的資料,雙向鍊錶需要比單鏈表占用更多的空間。1...