上一篇:iOS系統(tǒng)中的常用數(shù)據(jù)結(jié)構(gòu)之查找
?雙向鏈表
功能:對雙向鏈表進(jìn)行添加、刪除功能。
頭文件:#include <search.h>
平臺:POSIX
函數(shù)簽名:
//將某個鏈表元素element插入到pred后面。如果pred為NULL則表示element就是鏈表的頭部。
void insque(void *element, void *pred);
//將鏈表元素element從鏈表中刪除。
void remque(void *element);
參數(shù):
element:[in] 要添加或者刪除的鏈表元素。
pred:[in]鏈表插入元素element的前綴元素。
描述:
系統(tǒng)并沒有規(guī)定鏈表的數(shù)據(jù)結(jié)構(gòu),但是要求鏈表元素結(jié)構(gòu)體中的前面兩個數(shù)據(jù)成員必須是分別指向后一個元素和前一個元素。下面就是鏈表元素結(jié)構(gòu)體模板:
struct que_elem {
struct que_elem *next;
struct que_elem *prev;
//其他自定義數(shù)據(jù)成員
};
上述的兩個函數(shù)只負(fù)責(zé)將元素插入鏈表以及將元素從鏈表中刪除,至于維護(hù)鏈表的表頭或者鏈表的數(shù)量以及鏈表元素的內(nèi)存分配和銷毀則需要我們自身去維護(hù)。
示例代碼:
//student結(jié)構(gòu)體必須要滿足上面鏈表元素的結(jié)構(gòu)體定義規(guī)則
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);
}
下一篇:iOS標(biāo)準(zhǔn)庫中常用數(shù)據(jù)結(jié)構(gòu)和算法之排序