C语言链式线性表操作的代码?
时间: 2023-09-05 22:04:43 浏览: 122
### 回答1:
下面是一些C语言链表操作的示例代码:
1. 定义链表节点结构体
```
typedef struct node {
int data;
struct node *next;
} Node;
```
2. 创建链表
```
Node *create_list(int n) {
Node *head, *tail, *p;
int i, data;
head = tail = NULL;
for (i = 0; i < n; i++) {
scanf("%d", &data);
p = (Node *)malloc(sizeof(Node));
p->data = data;
p->next = NULL;
if (head == NULL) {
head = tail = p;
} else {
tail->next = p;
tail = p;
}
}
return head;
}
```
3. 插入节点
```
Node *insert_node(Node *head, int pos, int data) {
Node *p, *q;
int i = 0;
p = (Node *)malloc(sizeof(Node));
p->data = data;
p->next = NULL;
if (pos == 0) {
p->next = head;
head = p;
} else {
q = head;
while (q != NULL && i < pos - 1) {
q = q->next;
i++;
}
if (q == NULL) {
printf("Position not found\n");
} else {
p->next = q->next;
q->next = p;
}
}
return head;
}
```
4. 删除节点
```
Node *delete_node(Node *head, int pos) {
Node *p, *q;
int i = 0;
if (pos == 0) {
p = head;
head = head->next;
free(p);
} else {
q = head;
while (q != NULL && i < pos - 1) {
q = q->next;
i++;
}
if (q == NULL || q->next == NULL) {
printf("Position not found\n");
} else {
p = q->next;
q->next = p->next;
free(p);
}
}
return head;
}
```
5. 查找节点
```
int find_node(Node *head, int data) {
Node *p = head;
int pos = 0;
while (p != NULL) {
if (p->data == data) {
return pos;
}
p = p->next;
pos++;
}
return -1;
}
```
这些是一些基本的链表操作,可以根据需要进行修改和扩展。
### 回答2:
链式线性表是一种常见的数据结构,它由一系列的节点组成,每个节点包含数据元素和指向下一个节点的指针。
在C语言中,我们可以使用结构体来定义链表的节点,如下所示:
```
typedef struct Node {
int data; // 数据元素
struct Node* next; // 指向下一个节点的指针
} Node;
```
链表的操作包括插入节点、删除节点和遍历节点。下面是相应的代码实现:
1. 插入节点:
```c
void insertNode(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = data; // 设置节点数据
newNode->next = NULL; // 将新节点的指针设置为NULL
if (*head == NULL) {
*head = newNode; // 如果链表为空,将新节点作为头节点
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next; // 移动到链表的最后一个节点
}
temp->next = newNode; // 将新节点添加到链表的最后一个节点后面
}
}
```
2. 删除节点:
```c
void deleteNode(Node** head, int data) {
Node* currentNode = *head;
Node* prevNode = NULL;
if (currentNode != NULL && currentNode->data == data) {
*head = currentNode->next; // 若节点为头节点,则将头指针指向下一个节点
free(currentNode); // 释放节点的内存空间
return;
}
while (currentNode != NULL && currentNode->data != data) {
prevNode = currentNode;
currentNode = currentNode->next;
}
if (currentNode == NULL) {
return; // 若指定数据的节点不存在,则直接返回
}
prevNode->next = currentNode->next; // 删除节点
free(currentNode); // 释放节点的内存空间
}
```
3. 遍历节点:
```c
void traverseList(Node* head) {
Node* currentNode = head;
while (currentNode != NULL) {
printf("%d ", currentNode->data);
currentNode = currentNode->next;
}
printf("\n");
}
```
以上就是C语言链式线性表操作的基本代码实现。需要注意的是,在实际使用中需要考虑内存的申请和释放,以及错误处理等问题。
### 回答3:
链式线性表是一种常见的数据结构,它通过指针将数据元素连接起来形成一个链式结构。C语言中可以使用结构体和指针来实现链式线性表,下面是一个链式线性表的操作代码示例。
#define NULL 0
// 定义链式线性表的结点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链式线性表
void initList(Node** list) {
*list = NULL;
}
// 判断链式线性表是否为空
int isEmpty(Node* list) {
return list == NULL;
}
// 在链式线性表的末尾插入元素
void insert(Node** list, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (*list == NULL) {
*list = newNode;
} else {
Node* tail = *list;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = newNode;
}
}
// 删除链式线性表中第一个与指定值相等的元素
void remove(Node** list, int value) {
if (*list == NULL) {
return;
}
if ((*list)->data == value) {
Node* nodeToRemove = *list;
*list = (*list)->next;
free(nodeToRemove);
} else {
Node* currentNode = *list;
while (currentNode->next != NULL && currentNode->next->data != value) {
currentNode = currentNode->next;
}
if (currentNode->next != NULL) {
Node* nodeToRemove = currentNode->next;
currentNode->next = currentNode->next->next;
free(nodeToRemove);
}
}
}
// 遍历并打印链式线性表中的所有元素
void printList(Node* list) {
Node* currentNode = list;
while (currentNode != NULL) {
printf("%d ", currentNode->data);
currentNode = currentNode->next;
}
printf("\n");
}
以上是一个简单的链式线性表操作的代码,包括了初始化链式线性表、判断链式线性表是否为空、插入元素、删除元素和打印链式线性表等基本功能。通过这些操作,我们可以方便地对链式线性表进行增删查改等操作。
阅读全文