[領卓教育]迴圈連結串列
阿新 • • 發佈:2018-11-01
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 /************迴圈連結串列****************/ typedef struct node { int data ; struct node * next ; }linklist_t ; int list_len = 0 ;//迴圈連結串列的長度 /****************建立一個空連結串列***************/ linklist_t * create_list(void) { /*************表頭不存放資料**************/ linklist_t * h = (linklist_t *)malloc(sizeof(linklist_t)); h->data = 0 ; h->next = h ; list_len ++ ; return h ; } int insert_list(linklist_t * h,int value) { linklist_t * p = (linklist_t *)malloc(sizeof(linklist_t)); /*****************將兩個連結串列合在一起********************/ /*****************第二個連結串列結尾作為連結串列結尾********************/ p->next = h->next ; h->next = p ; p->data = value ; list_len ++ ; } /*************將連結串列中所有元素打印出來**************/ int show_list(linklist_t * h) { int i = 0 ; linklist_t * p = h->next; for(i=0;i<list_len;i++) { printf("%4d",p->data) ; p = p->next ; } printf("\n"); } /**************連結串列元素的刪除**************/ int remove_list(linklist_t * h,int value) { int i = 0 ; linklist_t * p = h; for(i=0;i<list_len;i++) { if(p->next->data == value) { p->next = p->next->next ; list_len -- ;//每刪除一個元素,連結串列長度減1 break ; } p = p->next ; } } /**************連結串列元素的替換**************/ int modify_list(linklist_t * h,int old,int new) { int i = 0 ; linklist_t * p = h; for(i=0;i<list_len;i++) { if(p->next->data == old) { p->next->data = new ; break ; } p = p->next ; } } int main(int argc, const char *argv[]) { int i ; linklist_t * H = create_list(); for(i=0;i<N;i++) { insert_list(H,i+1); } show_list(H); remove_list(H,5); show_list(H); modify_list(H,0,23); show_list(H); return 0; }