请用C语言实现一个简单的数据结构的增删查改
时间: 2023-03-10 21:32:11 浏览: 130
可以使用C语言编写一个简单的程序来实现数据结构的增删查改,可以通过定义一个数据结构来保存数据,比如定义一个结构体,然后定义相应的函数来实现增删查改功能。例如,定义一个插入函数来实现增加,定义一个删除函数来实现删除,定义一个查询函数来实现查询,定义一个修改函数来实现修改。
相关问题
请写一个用C语言实现的简单的数据结构的增删查改
### 回答1:
可以使用指针和结构体,可以实现增删查改:#include <stdio.h>struct DataStructure {
int data;
struct DataStructure *next;
};// 增加
void addNode(struct DataStructure **head, int data) {
struct DataStructure *newNode = (struct DataStructure*)malloc(sizeof(struct DataStructure));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}// 删除
void deleteNode(struct DataStructure **head, int data) {
struct DataStructure *temp = *head, *prev;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
}// 查找
struct DataStructure* searchNode(struct DataStructure *head, int data) {
struct DataStructure *temp = head;
while (temp != NULL) {
if (temp->data == data) return temp;
temp = temp->next;
}
return NULL;
}// 修改
void modifyNode(struct DataStructure *head, int data, int newData) {
struct DataStructure *temp = head;
while (temp != NULL) {
if (temp->data == data) {
temp->data = newData;
break;
}
temp = temp->next;
}
}
### 回答2:
以下是一个使用C语言实现的简单数据结构的增删查改示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} Node;
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
void insertNode(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
void deleteNode(Node** head, int value) {
if (*head == NULL)
return;
Node* current = *head;
Node* prev = NULL;
while (current != NULL && current->data != value) {
prev = current;
current = current->next;
}
if (current == NULL)
return;
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
}
Node* searchNode(Node* head, int value) {
while (head != NULL && head->data != value) {
head = head->next;
}
return head;
}
void updateNode(Node* head, int oldValue, int newValue) {
Node* targetNode = searchNode(head, oldValue);
if (targetNode != NULL)
targetNode->data = newValue;
}
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
insertNode(&head, 5);
insertNode(&head, 10);
insertNode(&head, 15);
insertNode(&head, 20);
printf("Linked List: ");
printList(head);
deleteNode(&head, 15);
printf("After deleting 15: ");
printList(head);
printf("Searching for 10: ");
Node* node_10 = searchNode(head, 10);
if (node_10 != NULL) {
printf("Found\n");
} else {
printf("Not Found\n");
}
printf("Updating 10 to 100: ");
updateNode(head, 10, 100);
printList(head);
return 0;
}
```
这个示例演示了一个简单的链表数据结构。createNode函数用于创建一个新的链表节点,insertNode函数用于将节点插入到链表的末尾,deleteNode函数用于删除特定值的节点,searchNode函数用于搜索链表中的节点,updateNode函数用于更新链表节点的值,printList函数用于打印链表的数值。在示例中,首先创建一个链表并插入一些节点,然后进行删除、搜索和更新操作,并打印链表的数值。
### 回答3:
以下是一个使用C语言实现的简单的数据结构的增删查改的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* head;
} LinkedList;
void initLinkedList(LinkedList* list) {
list->head = NULL;
}
void insert(LinkedList* list, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (list->head == NULL) {
list->head = newNode;
} else {
Node* current = list->head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
int search(LinkedList* list, int data) {
Node* current = list->head;
while (current != NULL) {
if (current->data == data) {
return 1; // 找到了
}
current = current->next;
}
return 0; // 没找到
}
int delete(LinkedList* list, int data) {
if (list->head == NULL) {
return 0; // 空链表
}
Node* current = list->head;
Node* previous = NULL;
while (current != NULL && current->data != data) {
previous = current;
current = current->next;
}
if (current == NULL) {
return 0; // 没找到
}
if (previous == NULL) {
list->head = current->next;
} else {
previous->next = current->next;
}
free(current);
return 1; // 删除成功
}
void display(LinkedList* list) {
Node* current = list->head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
LinkedList list;
initLinkedList(&list);
insert(&list, 1);
insert(&list, 2);
insert(&list, 3);
printf("初始链表内容:");
display(&list);
int searchNum = 2;
if (search(&list, searchNum)) {
printf("链表中存在数字%d\n", searchNum);
} else {
printf("链表中不存在数字%d\n", searchNum);
}
int deleteNum = 2;
if (delete(&list, deleteNum)) {
printf("成功删除数字%d\n", deleteNum);
} else {
printf("删除数字%d失败\n", deleteNum);
}
printf("删除后的链表内容:");
display(&list);
return 0;
}
```
这段代码实现了一个简单的链表数据结构,并提供了插入、查找、删除和显示链表内容的功能。通过添加节点、遍历链表并与目标节点进行比较,我们可以实现增加、删除和查找操作。在主函数中,我们创建了一个名为`list`的链表,并演示了插入了3个节点、查找某个数和删除某个节点后的链表内容。
这只是一个简单的示例,实际上,数据结构的增删查改操作要根据具体的需求来进行设计和实现。
用c语言写一个实现后缀数组的增删查改的代码,包含解释
后缀数组是一种数据结构,它用于高效地存储字符串的所有后缀,并允许我们快速查找特定后缀的位置。下面是一个简单的C语言代码示例,实现了后缀数组的创建、插入和查询功能,但请注意,这个例子相对基础,没有包括删除和修改操作,因为这些通常涉及到复杂的数据结构调整,这里仅展示基本原理:
```c
#include <stdio.h>
#include <string.h>
// 字符串比较函数
int cmp(char *a, char *b) {
while(*a && *b && *a == *b) a++, b++;
return *a - *b;
}
// 后缀排序函数
void suffix_sort(char *str, int n) {
// 创建原始数组,包含后缀及其下标
int arr[n][2] = {0};
for(int i = 0; i < n; i++) {
arr[i][0] = str[i];
arr[i][1] = i;
}
// 对数组按照后缀进行排序
qsort(arr, n, sizeof(arr[0]), cmp);
// 将排序后的数组转换为后缀数组
for(int i = 1; i < n; i++)
arr[i][1] = (arr[i][1] > arr[i - 1][1]) ? arr[i][1] : arr[i - 1][1];
return;
}
// 查找后缀在数组中的位置
int find_char_pos(char *str, char ch, int n) {
for(int i = 0; i < n; i++) {
if(arr[i][0] == ch)
return i;
}
return -1; // 如果未找到,则返回-1
}
int main() {
const char* input_str = "banana";
int len = strlen(input_str);
// 创建后缀数组
suffix_sort(input_str, len);
// 示例操作
printf("查找'a'的索引:%d\n", find_char_pos(input_str, 'a', len)); // 输出 4
// 删除和修改操作在这儿不是那么简单,需要更新整个后缀数组,超出本示例范围
return 0;
}
```
阅读全文