上一篇:iOS系統中的經常使用數據結構之查找bash
功能:對雙向鏈表進行添加、刪除功能。數據結構
頭文件:#include <search.h>函數
平臺:POSIXpost
函數簽名:ui
//將某個鏈表元素element插入到pred後面。若是pred爲NULL則表示element就是鏈表的頭部。
void insque(void *element, void *pred);
//將鏈表元素element從鏈表中刪除。
void remque(void *element);
複製代碼
參數:spa
element:[in] 要添加或者刪除的鏈表元素。code
pred:[in]鏈表插入元素element的前綴元素。內存
描述:element
系統並無規定鏈表的數據結構,可是要求鏈表元素結構體中的前面兩個數據成員必須是分別指向後一個元素和前一個元素。下面就是鏈表元素結構體模板:rem
struct que_elem {
struct que_elem *next;
struct que_elem *prev;
//其餘自定義數據成員
};
複製代碼
上述的兩個函數只負責將元素插入鏈表以及將元素從鏈表中刪除,至於維護鏈表的表頭或者鏈表的數量以及鏈表元素的內存分配和銷燬則須要咱們自身去維護。
示例代碼:
//student結構體必需要知足上面鏈表元素的結構體定義規則
typedef student
{
struct student *next;
struct student *prev;
int age;
char *name;
}student_t;
void traverse(student_t *head)
{
while (head->next != NULL)
{
printf("student's age = %d, name=%s\n",head->age, head->name);
head = head->next;
}
}
void main()
{
student_t *student1 = malloc(sizeof(student_t));
student1->age = 10;
student1->name = "Alex";
student_t *student2 = malloc(sizeof(student_t));
student2->age = 20;
student2->name = "Bob";
//student1做爲鏈表的表頭
insque(student1, NULL);
//student2插入到student1後面
insque(student2, student1);
//遍歷鏈表
traverse(student1);
//刪除student1
remque(student1);
free(student1);
//刪除student2
remque(student2);
free(student2);
}
複製代碼