用C++完成以下任务:设计一个单链表,实现单链表初始化、求数据元素个数操作、插入、删除、取数据元素、判非空操作。
时间: 2024-01-31 21:04:57 浏览: 60
单链表的操作
好的,以下是C语言实现单链表的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 单链表初始化
void initList(Node **head) {
*head = NULL;
}
// 插入节点
void insertNode(Node **head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
Node *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 删除节点
void deleteNode(Node **head, int data) {
if (*head == NULL) {
return;
}
if ((*head)->data == data) {
*head = (*head)->next;
return;
}
Node *p = *head;
while (p->next != NULL && p->next->data != data) {
p = p->next;
}
if (p->next == NULL) {
return;
}
p->next = p->next->next;
}
// 取数据元素
int getNodeData(Node **head, int index) {
if (*head == NULL) {
return -1;
}
Node *p = *head;
int i = 0;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL) {
return -1;
}
return p->data;
}
// 求数据元素个数
int getListLength(Node **head) {
if (*head == NULL) {
return 0;
}
Node *p = *head;
int count = 0;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
// 判断链表是否为空
int isListEmpty(Node **head) {
return *head == NULL;
}
// 测试函数
int main() {
Node *head;
initList(&head);
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
printf("链表长度:%d\n", getListLength(&head));
printf("第2个元素:%d\n", getNodeData(&head, 1));
deleteNode(&head, 2);
printf("链表长度:%d\n", getListLength(&head));
printf("第2个元素:%d\n", getNodeData(&head, 1));
return 0;
}
```
使用方法:调用相应的函数即可完成对单链表的操作,例如插入数据元素可调用 `insertNode` 函数,删除数据元素可调用 `deleteNode` 函数,取数据元素可调用 `getNodeData` 函数,判断链表是否为空可调用 `isListEmpty` 函数,求链表长度可调用 `getListLength` 函数。
阅读全文