Download presentation
Presentation is loading. Please wait.
1
資料結構(計財系)
2
鏈結串列 簡介 應用 變形 堆疊、佇列 多項式 /*稀疏矩陣*/ 環狀鏈結串列(circular linked list)
雙向鏈結串列(doubly linked list)
3
用鏈結串列表示堆疊 struct STACK_NODE { int val ; struct STACK_NODE * next ; } ;
struct STACK_NODE * top ; data data int stack_empty () { return top == NULL ; } data data top
4
用鏈結串列表示堆疊 struct STACK_NODE { int val ; struct STACK_NODE * next ; } ;
struct STACK_NODE * top ; data top data void push ( int val ) { struct STACK_NODE * new_node ; new_node = malloc(sizeof(struct STACK_NODE)); new_node->val = val ; new_node->next = top ; top = new_node ; } data data
5
用鏈結串列表示堆疊 struct STACK_NODE { int val ; struct STACK_NODE * next ; } ;
struct STACK_NODE * top ; data top data int pop () { int val = -1 ; struct STACK_NODE * tmp ; if ( !stack_empty() ) { val = top->val ; tmp = top ; top = top->next ; free ( tmp ) ; } else printf ( "Error: stack empty\n" ) ; return val ; } data data
6
用鏈結串列表示佇列 struct QUEUE_NODE { int val ; struct QUEUE_NODE * next ; } ;
struct QUEUE_NODE * head ; struct QUEUE_NODE * tail ; 用鏈結串列表示佇列 data data int queue_empty () { return head == NULL ; } data data head tail
7
用鏈結串列表示佇列 struct QUEUE_NODE { int val ; struct QUEUE_NODE * next ; } ;
struct QUEUE_NODE * head ; struct QUEUE_NODE * tail ; 用鏈結串列表示佇列 data head tail void enqueue ( int val ) { struct QUEUE_NODE * new_node ; new_node = malloc ( sizeof ( struct QUEUE_NODE ) ) ; new_node->val = val ; new_node->next = NULL ; if ( !queue_empty() ) tail->next = new_node ; else head = new_node ; tail = new_node ; }
8
用鏈結串列表示佇列 struct QUEUE_NODE { int val ; struct QUEUE_NODE * next ; } ;
struct QUEUE_NODE * head ; struct QUEUE_NODE * tail ; 用鏈結串列表示佇列 data head tail int dequeue () { int val = -1 ; struct QUEUE_NODE * tmp ; if ( !queue_empty() ) { val = head->val ; tmp = head ; head = head->next ; free ( tmp ) ; } else printf ( "Error: queue empty\n" ) ; return val ; }
9
用鏈結串列表示多項式 a = 3x14 + 2x8 + 1 struct POLY_NODE { int coef ;
int expon ; struct POLY_NODE * next ; } ; struct POLY_NODE * a ; coef expon a = 3x14 + 2x8 + 1 3 14 2 8 1 a
10
變形:環狀鏈結串列 3 14 2 8 1 a
11
變形:雙向鏈結串列 這樣就可以解決上節投影片所述,delete只能刪除下一個Node的問題。 struct NODE {
int data ; //char name[64] ; //double ... ; struct NODE * next ; struct NODE * prev ; } ; head 這樣就可以解決上節投影片所述,delete只能刪除下一個Node的問題。
12
變形:雙向鏈結串列 1. 假設 node 是要被刪除的人
2 3 4 head node 1. 假設 node 是要被刪除的人 2. node->prev->next = node->next ; 3. node->next->prev = node->prev ; 4. Free ( node ) ;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.