最佳答案
引言
鏈表是C言語中一種重要的數據構造,它在各種編程場景中都有廣泛的利用。但是,鏈表編程也是C言語編程中較為複雜跟輕易出錯的部分。本文將為妳供給一份實戰運轉指南,幫助妳破解C言語鏈表編程困難。
鏈表的基本不雅點
鏈表的構造
鏈表由一系列節點構成,每個節點包含兩部分:數據部分跟指針部分。數據部分存儲現實的數據,指針部分指向下一個節點。
struct Node {
int data;
struct Node* next;
};
鏈表的範例
- 單鏈表:每個節點只有一個指向下一個節點的指針。
- 雙鏈表:每個節點有兩個指針,一個指向前一個節點,一個指向後一個節點。
- 輪回鏈表:最後一個節點的指針指向第一個節點,構成一個環。
鏈表的基本操縱
創建鏈表
struct Node* createList(int arr[], int size) {
struct Node* head = NULL;
struct Node* temp = NULL;
struct Node* p = NULL;
for (int i = 0; i < size; i++) {
temp = (struct Node*)malloc(sizeof(struct Node));
temp->data = arr[i];
temp->next = NULL;
if (head == NULL) {
head = temp;
} else {
p->next = temp;
}
p = temp;
}
return head;
}
拔出節點
void insertNode(struct Node** head, int data, int position) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
struct Node* temp = *head;
for (int i = 0; i < position - 1; i++) {
if (temp->next == NULL) {
return;
}
temp = temp->next;
}
newNode->next = temp->next;
temp->next = newNode;
}
}
刪除節點
void deleteNode(struct Node** head, int position) {
if (*head == NULL) {
return;
}
struct Node* temp = *head;
struct Node* prev = NULL;
if (position == 0) {
*head = temp->next;
free(temp);
return;
}
for (int i = 0; i < position; i++) {
prev = temp;
temp = temp->next;
if (temp == NULL) {
return;
}
}
prev->next = temp->next;
free(temp);
}
遍歷鏈表
void traverseList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
實戰案例
以下是一個利用鏈表實現的簡單待服務項列表順序:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void insertNode(struct Node** head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void deleteNode(struct Node** head, int data) {
struct Node* temp = *head, *prev = NULL;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
}
void traverseList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
struct Node* head = NULL;
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
insertNode(&head, 4);
printf("Original list: ");
traverseList(head);
deleteNode(&head, 2);
printf("List after deleting 2: ");
traverseList(head);
return 0;
}
總結
經由過程本文的實戰運轉指南,妳應當可能更好地懂得跟利用C言語鏈表編程。鏈表編程固然複雜,但只有控制了基本不雅點跟操縱,就可能處理各種編程困難。