帮我写一个程序关于链式存储结构线性表
时间: 2023-06-06 16:05:20 浏览: 55
好的,我可以帮您编写一个关于链式存储结构的线性表程序。以下是一个示例代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node;
typedef struct list {
Node *head; // 头结点
int length; // 链表长度
} List;
// 初始化链表
void init_list(List *list) {
list->head = NULL;
list->length = 0;
}
// 插入节点
void insert_node(List *list, int data) {
Node *new_node = (Node*)malloc(sizeof(Node)); // 分配节点内存空间
new_node->data = data;
new_node->next = list->head;
list->head = new_node;
list->length++;
}
// 删除节点
void delete_node(List *list, int data) {
Node *p = list->head;
Node *last = NULL;
while (p != NULL && p->data != data) { // 找到要删除的节点
last = p;
p = p->next;
}
if (p == NULL) {
printf("Not found data %d in list\n", data); // 没找到
return;
}
if (last == NULL) {
list->head = p->next;
} else {
last->next = p->next;
}
free(p); // 释放节点内存
list->length--;
}
// 清空链表
void clear_list(List *list) {
while (list->head != NULL) {
Node *p = list->head;
list->head = p->next;
free(p);
}
list->length = 0;
}
// 打印链表
void print_list(List *list) {
Node *p = list->head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
List list;
init_list(&list);
insert_node(&list, 1);
insert_node(&list, 2);
insert_node(&list, 3);
printf("Before deleting: ");
print_list(&list);
delete_node(&list, 2);
printf("After deleting: ");
print_list(&list);
clear_list(&list);
printf("After clearing: ");
print_list(&list);
return 0;
}
```
以上程序实现了链式存储结构的线性表,包括节点的插入和删除,链表的清空和打印。具体的操作可以参考main函数中的示例。