单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1、从键盘输入20个整数,产生带表头的单链表,并输出结点值; 2、从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”; 3、从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果; 4、从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果并整合成一个程序
时间: 2024-02-28 11:53:28 浏览: 53
数据结构实验一 单链表操作验证
4星 · 用户满意度95%
好的,以下是您要求的程序,请检查:
```c
#include <stdio.h>
#include <stdlib.h>
// 单链表结点结构体定义
typedef struct Node{
int data;
struct Node *next;
} Node, List;
// 创建带表头的单链表
List* createList(){
List *head = (List*)malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
printf("请输入20个整数:");
for(int i=0; i<20; i++){
Node *newNode = (Node*)malloc(sizeof(Node));
scanf("%d", &(newNode->data));
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
return head;
}
// 遍历单链表并输出所有结点的值
void printList(List *head){
Node *p = head->next;
printf("当前单链表的所有结点值为:");
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 在单链表中查找指定值的结点
int searchNode(List *head, int x){
Node *p = head->next;
while(p){
if(p->data == x){
return 1; // 找到了
}
p = p->next;
}
return 0; // 找不到
}
// 在单链表中指定位置插入结点
void insertNode(List *head, int i, int x){
Node *p = head;
for(int j=0; j<i-1 && p->next; j++){ //遍历单链表找到指定位置的前驱结点
p = p->next;
}
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = p->next;
p->next = newNode;
}
// 删除单链表中指定位置的结点
void deleteNode(List *head, int i){
Node *p = head;
for(int j=0; j<i-1 && p->next; j++){ //遍历单链表找到指定位置的前驱结点
p = p->next;
}
if(!p->next){ //删除位置不合法
printf("删除位置不合法\n");
return;
}
Node *q = p->next; //q指向要删除的结点
p->next = q->next; //当前结点的指针域指向要删除结点的后继结点
free(q); //释放要删除的结点
}
int main(){
List *head = createList();
printList(head);
// 查找结点
int x;
printf("请输入要查找的数值:");
scanf("%d", &x);
if(searchNode(head, x)){
printf("找到了\n");
}
else{
printf("找不到\n");
}
// 插入结点
int i, y;
printf("请输入要插入的位置和数值:");
scanf("%d%d", &i, &y);
insertNode(head, i, y);
printList(head);
// 删除结点
int j;
printf("请输入要删除的位置:");
scanf("%d", &j);
deleteNode(head, j);
printList(head);
return 0;
}
```
注意:该程序中删除结点的位置从1开始计算,即第一个结点的位置为1。若要从0开始计算,请将for循环中的i-1改为i,j-1改为j。
阅读全文