資料結構與演算法篇 之迴圈單鏈表與雙鏈表

2021-09-28 23:53:04 字數 4054 閱讀 8006

鍊錶的基礎操作,增刪查插 感覺最重要的畫出來,一步一步的分析,不要憑空想象,不要憑空想象,不要憑空想象

迴圈單鏈表:

#include #include #define bool int

#define false 0

#define true 1

typedef struct list

list;

list * init_list()

list * new_node(int data)

int get_list_len(list *head)

return len;

}bool add_tail(list * head,list * p)

int len = get_list_len(head);

list *tmp = head;

while(len--)

p->next = head;

tmp->next = p;

return true;

}bool add_head(list *head,list *p)

list *tmp = head;

p->next = tmp->next;

tmp->next = p;

return true;

}bool search_node(list *head,int data,bool flag)

break;

}if(p->next == head)

tmp = p;

p = p->next;

}}bool delete_tail_node(list *head)

p->next->next = null;

p->next = head;

free(p->next);

}bool delete_head_node(list *head)

tmp = p->next;

p->next = p->next->next;

tmp->next = null;

free(tmp);

}bool insert_tail_or_head(list *head,unsigned int num,list *new,bool flag)

if(get_list_len(head) < num) return false;

struct list *p = head;

if(flag == true)

}else

}new->next = p->next;

p->next = new;

return true;

}bool show_list(list* head)

printf("\n");

return true;

}int main()

printf("start...\n");

show_list(head);

printf("end...\n");

int len = get_list_len(head);

printf("list len %d\n",len);

delete_tail_node(head);

show_list(head);

delete_head_node(head);

show_list(head);

show_list(head);

len = get_list_len(head);

printf("list len %d\n",len);

insert_tail_or_head(head,2,new_node(23),true);

show_list(head);

search_node(head,2,true);

show_list(head);

return 1;

}

迴圈雙鏈表:

#include #include #define bool int

#define false 0

#define true 1

typedef struct list

list;

list * init_list()

list * new_node(int data)

int get_list_len(list *head)

return len;

}bool add_tail(list * head,list * p)

int len = get_list_len(head);

list *tmp = head;

while(len--)

p->next = head;

p->prev = tmp;

head->prev = p;

tmp->next = p;

return true;

}bool add_head(list *head,list *p)

list *tmp = head;

p->next = tmp->next;

p->prev = tmp;

tmp->next->prev = p;

tmp->next = p;

return true;

}bool search_node(list *head,int data,bool flag)

break;

}if(p->next == head)

p = p->next;

}}bool delete_tail_node(list *head)

p->next->prev = p->prev;

p->prev->next = p->next;

p->prev = null;

p->next = null;

free(p);

}bool delete_head_node(list *head)

p->next->prev = p->prev;

p->prev->next = p->next;

p->next = null;

p->prev = null;

free(p);

}bool insert_tail_or_head(list *head,unsigned int num,list *new,bool flag)

if(get_list_len(head) < num) return false;

struct list *p = head;

if(flag == true)

else

new->next = p->next;

new->prev = p;

p->next->prev = new;

p->next = new;

return true;

}bool show_list(list* head)

printf("%d",p->data);

printf("\n");

return true;

}int main()

printf("start...\n");

show_list(head);

printf("end...\n");

int len = get_list_len(head);

printf("list len %d\n",len);

delete_tail_node(head);

delete_head_node(head);

delete_head_node(head);

show_list(head);

show_list(head);

len = get_list_len(head);

printf("list len %d\n",len);

insert_tail_or_head(head,2,new_node(23),false);

show_list(head);

search_node(head,2,true);

show_list(head);

return 1;

}

迴圈單鏈表(演算法與資料結構)

迴圈單鏈表的表現 struct node 結點型別 typedef struct node pnode 結點指標型別 struct node typedef struct node linklist 結點指標型別 linklist clist clist 尾指標 迴圈單鏈表上的操作 1.建立空表 宣...

資料結構與演算法之單鏈表

include include define maxsize 100 typedef int elemtype typedef struct lnode linknode void createlistf linknode l,elemtype a,int n 頭插法建立單鏈表 void initl...

資料結構與演算法之單鏈表

鍊錶的實現 實現單鏈表的 構建 資料新增 資料刪除 返回元素所在位置 資料查詢 返回元素所在的位置 的演算法設計 鍊錶的實現 實現單鏈表的 構建 資料新增 資料刪除 返回元素所在位置 資料查詢 返回元素所在的位置 的演算法設計 include include using namespace std ...