小笨笨的DS學習網誌

★------------- ★------ ★-------------------- ★-------------------- ★--------------------

2010年5月24日 星期一

修改Ch4-3-3.c為Ch4-3-3e.c

#include <stdio.h>
#include <stdlib.h>


/* 程式範例: Ch4-3.h */
 struct Node {        /* Node節點結構 */
   int data;          /* 結構變數宣告 */ 
   struct Node *next; /* 指向下一個節點 */
 };
typedef struct Node LNode;   /* 串列節點的新型態 */
 typedef LNode *List;         /* 串列的新型態 */
 List first = NULL;           /* 串列的開頭指標 */
/* 函數: 建立串列 */

 void createList(int len, int *array) {
   int i;
   List newnode;
   for ( i = 0; i < len; i++ ) {
      /* 配置節點記憶體 */ 
      newnode = (List) malloc(sizeof(LNode));
      newnode->data = array[i]; /* 建立節點內容 */
      newnode->next = first;
      first = newnode;
   }
}
/* 函數: 檢查串列是否是空的 */
int isListEmpty() {
   if ( first == NULL ) return 1;
   else                 return 0;
}
/* 函數: 顯示串列資料 */
void printList() {
   List current = first;  /* 目前的串列指標 */ 
   while ( current != NULL ) { /* 顯示主迴圈 */
      printf("[%d]", current->data);
      current = current->next;  /* 下一個節點 */ 
   }
   printf("\n");
}
/* 函數: 搜尋節點資料 */
List searchNode(int d) {
   List current = first;   /* 目前的串列指標 */ 
   while ( current != NULL ) { /* 搜尋主迴圈 */
      if ( current->data == d ) /* 是否找到資料 */
         return current; /* 找到 */
      current = current->next;  /* 下一個節點 */ 
   }
   return NULL;         /* 沒有找到 */
}

/* 程式範例: insertNode.c */
/* 函數: 插入節點 */

 void insertNode(List ptr, int d) {
   List newnode;
  /* 配置節點記憶體 */ 
   newnode = (List) malloc(sizeof(LNode));
   newnode->data = d; /* 指定節點值 */ 
   if ( ptr == NULL ) {
     /* 情況1: 插入第一個節點 */ 
      newnode->next = first; /* 新節點成為串列開始 */ 
      first = newnode;
   }else {
      newnode->next=ptr->next;
/* 新節點指向下一節點 */ 
      ptr->next = newnode;  /* 節點ptr指向新節點 */ 
   }
 }
/* 主程式 */ int main() {
   int temp; /* 宣告變數 */ 
   int data[6]={ 1, 2, 3, 4, 5, 6 };/* 建立串列的陣列 */
   List ptr;
   createList(6, data); /* 建立串列 */ 
   printf("原來的串列: ");
   printList(); /* 顯示串列 */ 
   /* 4-3-3: 節點插入 */ 
   temp = 0;
   insertNode(NULL, 50); /* 插入第一個節點 */ 
   printf("插入後串列: ");
   printList(); /* 顯示插入後串列 */ 
   while ( temp != -1 ) {
      printf("請輸入插入其後的郵寄編號(-1結束) ==> ");
      scanf("%d", &temp); /* 讀取郵寄編號 */ 
      if ( temp != -1 ) {
         ptr = searchNode(temp); /* 找尋節點 */
         if ( ptr != NULL )
            printf("請輸入新的郵寄編號(0~100) ==> ");
            scanf("%d", &temp); /* 讀取新的郵寄編號 */ 
            insertNode(ptr, temp);
            printf("插入後串列: ");
            printList(); /* 顯示插入後串列 */ 
      }
   }
   system("PAUSE");
   return 0;
}

1 則留言: