"单链表插入和删除实验报告及程序源代码"

版权申诉
0 下载量 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 ``` 五、总结 通过本次实验,我成功地建立了一个数据域为字符串的单链表,并实现了插入和删除结点的功能。在实现过程中,我对单链表的基本操作有了更深刻的理解,并掌握了链表的基本算法和时间性能分析。通过这次实验,我对数据结构中的链表有了更全面的认识,也提高了自己的编程能力。希望通过不断的实践和学习,我能够更好地掌握数据结构和算法,为将来的编程工作打下坚实的基础。