Presentation is loading. Please wait.

Presentation is loading. Please wait.

資料結構(計財系).

Similar presentations


Presentation on theme: "資料結構(計財系)."— Presentation transcript:

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 ) ;


Download ppt "資料結構(計財系)."

Similar presentations


Ads by Google