How to program C〈資料結構〉

自我參考結構

自我參考結構就是你定義的結構中

有一個成員為指向本身結構的 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;
}