以C结构体或C++的“类”代替“第2章中复杂数据类型”,实现“链式线性表”,求CreateList、ListPrint、GetElem、ListLength、ListInsert、ListDelete的完整函数
时间: 2023-05-29 16:07:11 浏览: 52
以下是使用C结构体实现链式线性表的函数实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct List {
Node *head;
int length;
} List;
// 创建链式线性表
List *CreateList() {
List *list = (List*)malloc(sizeof(List));
list->head = NULL;
list->length = 0;
return list;
}
// 遍历打印链式线性表
void ListPrint(List *list) {
if (list == NULL || list->head == NULL) {
printf("链式线性表为空\n");
return;
}
Node *p = list->head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 获取链式线性表的第i个元素
int GetElem(List *list, int i) {
if (list == NULL || list->head == NULL) {
printf("链式线性表为空\n");
return -1;
}
if (i <= 0 || i > list->length) {
printf("参数不合法\n");
return -1;
}
Node *p = list->head;
int j = 1;
while (p != NULL && j < i) {
p = p->next;
j++;
}
if (p == NULL) {
printf("参数不合法\n");
return -1;
}
return p->data;
}
// 获取链式线性表的长度
int ListLength(List *list) {
if (list == NULL) {
printf("链式线性表为空\n");
return 0;
}
return list->length;
}
// 在链式线性表的第i个位置插入元素e
void ListInsert(List *list, int i, int e) {
if (list == NULL) {
printf("链式线性表为空\n");
return;
}
if (i < 1 || i > list->length + 1) {
printf("参数不合法\n");
return;
}
Node *p = list->head;
Node *prev = NULL;
int j = 1;
while (p != NULL && j < i) {
prev = p;
p = p->next;
j++;
}
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = e;
if (prev == NULL) {
new_node->next = list->head;
list->head = new_node;
} else {
new_node->next = prev->next;
prev->next = new_node;
}
list->length++;
}
// 删除链式线性表的第i个元素
void ListDelete(List *list, int i) {
if (list == NULL || list->head == NULL) {
printf("链式线性表为空\n");
return;
}
if (i < 1 || i > list->length) {
printf("参数不合法\n");
return;
}
Node *p = list->head;
Node *prev = NULL;
int j = 1;
while (p != NULL && j < i) {
prev = p;
p = p->next;
j++;
}
if (prev == NULL) {
list->head = p->next;
} else {
prev->next = p->next;
}
free(p);
list->length--;
}
int main() {
List *list = CreateList();
ListInsert(list, 1, 1);
ListInsert(list, 2, 2);
ListInsert(list, 3, 3);
ListInsert(list, 4, 4);
ListPrint(list);
printf("链式线性表长度为:%d\n", ListLength(list));
printf("第3个元素为:%d\n", GetElem(list, 3));
ListDelete(list, 2);
ListPrint(list);
printf("链式线性表长度为:%d\n", ListLength(list));
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)