用C语言实现及在两种存储结构上的实现。要求顺序表的数据域是整型数值,完成顺序表的初始化、插入、删除、查找、取值等操作,插入时不允许重复的值插入表中。要求单链表的数据域是字符串,完成单链表的初始化(头插法+尾插法)、插入、删除、查找、取值、等操作。
时间: 2024-11-25 13:09:36 浏览: 18
数据结构-C语言描述(顺序表、链表)
在C语言中,我们通常会使用数组(顺序表)和动态内存分配(链表)来实现这两种数据结构。
**顺序表(数组实现):**
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE]; // 整型数值
int length;
} IntList;
// 初始化
void init(IntList* list) {
list->length = 0;
}
// 插入:检查是否已存在并避免重复
void insert(IntList* list, int value) {
if (list->length < MAX_SIZE && !find(list, value)) {
list->data[list->length++] = value;
} else {
printf("Value already exists in the list.\n");
}
}
// 查找、取值等操作,这里省略,因为它们类似
// 查找:使用循环遍历列表查找特定值,返回索引或-1表示未找到
// 取值:通过索引访问data[]数组获取值
```
**单链表(链表实现):**
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
char* str; // 字符串
struct Node* next; // 指向下一个节点的指针
} StringListNode;
// 初始化(头插法)
StringListNode* create_list() {
StringListNode* head = (StringListNode*)malloc(sizeof(StringListNode));
head->str = NULL;
head->next = NULL;
return head;
}
// 插入(尾插法)
void insert_tail(StringListNode** head, const char* str) {
StringListNode* new_node = (StringListNode*)malloc(sizeof(StringListNode));
new_node->str = strdup(str);
new_node->next = *head;
*head = new_node;
}
// 删除、查找、取值等操作,需要遍历链表,这里同样简化处理
// 删除:遍历链表找到目标字符串并删除节点
// 查找:遍历链表比较每个节点的字符串
// 取值:访问当前节点的str字段获取字符串
```
阅读全文