自我參考結構
自我參考結構就是你定義的結構中
有一個成員為指向本身結構的 pointer,例如
1 2 3 4
| struct node{ int date; struct node *nextPtr; }
|
動態記憶體配置
使用 malloc 和 free 來要求記憶體
malloc 要求記憶體以 byte 為單位
要到記憶體後會回傳一個 void *
void * 可以被設定給任何類型的指標
1 2
| newPtr = malloc(sizeof(struct node)); free(newPtr);
|
Linked Lists
實作 Linked Lists 需要做的 Func 有以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| 插入 刪除 搜尋
// 其他 印出鏈結串列 判斷串列是否為空
void Insert(int x); void PrintList(); typedef struct node{ char data; struct node *next; }Node; Node *headPtr;
void Insert(int x) { Node *temp = malloc(sizeof(Node)); temp->data = x; temp->next = NULL;
if( headPtr != NULL ) { temp->next = headPtr; } headPtr = temp; }
void PrintList() { Node *temp = headPtr; printf("List:"); while( temp!= NULL ) { printf("%d ",temp->data); temp = temp->next; } printf("\n"); }
void Del(int x) { if(headPtr->data == x) { Node *temp = headPtr; headPtr = headPtr->next; free(temp); } else { Node *temp = headPtr; while(temp->next->data != x) { temp = temp->next; } Node *temp2 = temp->next; temp->next = temp2->next; free(temp2); } }
int main() { headPtr = NULL;
int choice,x; printf("1 Insert\n"); printf("2 Del \n"); printf("3 Exit \n"); printf("Enter cmd\n"); scanf("%d",&choice); while(choice!=3) { switch(choice) { case 1: printf("Enter number\n"); scanf("%d",&x); Insert(x); PrintList(); break;
case 2: printf("Enter number\n"); scanf("%d",&x); Del(x); PrintList(); break; } printf("Enter cmd\n"); scanf("%d",&choice); } return 0; }
|