"单链表插入和删除实验报告及程序源代码"
版权申诉
108 浏览量
更新于2024-03-03
收藏 290KB DOC 举报
实验一、单链表的插入和删除
一、目的
本实验的目的是了解和掌握线性表的逻辑结构和链式存储结构,同时掌握单链表的基本算法以及相关的时间性能分析。
二、要求
在本实验中,要建立一个数据域定义为字符串的单链表,要求在链表中不允许出现重复的字符串。根据输入的字符串,程序应当首先找到对应的结点,然后进行删除操作。
三、程序源代码
下面是本实验的程序源代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
// 定义链表结点结构体
typedef struct Node {
char data[MAX_LEN];
struct Node* next;
} Node;
// 初始化链表
void initList(Node** head) {
*head = (Node*)malloc(sizeof(Node));
(*head)->next = NULL;
}
// 插入结点
void insertNode(Node* head, char* str) {
Node* newNode = (Node*)malloc(sizeof(Node));
strcpy(newNode->data, str);
newNode->next = head->next;
head->next = newNode;
}
// 删除结点
void deleteNode(Node* head, char* str) {
Node* p = head;
Node* q = head->next;
while (q != NULL) {
if (strcmp(q->data, str) == 0) {
p->next = q->next;
free(q);
break;
}
p = q;
q = q->next;
}
}
// 输出链表所有结点
void printList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%s ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node* head;
initList(&head);
// 插入结点
insertNode(head, "Hello");
insertNode(head, "World");
insertNode(head, "C");
insertNode(head, "Language");
printf("初始链表:");
printList(head);
// 删除结点
deleteNode(head, "World");
printf("删除结点后的链表:");
printList(head);
return 0;
}
```
四、实验结果
经过以上程序的运行,会输出类似如下的结果:
```
初始链表:Language C World Hello
删除结点后的链表:Language C Hello
```
五、总结
通过本次实验,我成功地建立了一个数据域为字符串的单链表,并实现了插入和删除结点的功能。在实现过程中,我对单链表的基本操作有了更深刻的理解,并掌握了链表的基本算法和时间性能分析。通过这次实验,我对数据结构中的链表有了更全面的认识,也提高了自己的编程能力。希望通过不断的实践和学习,我能够更好地掌握数据结构和算法,为将来的编程工作打下坚实的基础。
2022-07-11 上传
2021-10-08 上传
2023-03-10 上传
2024-10-30 上传
2024-10-26 上传
2024-10-28 上传
2024-11-07 上传
2024-10-27 上传
2024-10-26 上传
xxiang85
- 粉丝: 5
- 资源: 19万+