用c语言1、从键盘输入20个整数,产生带表头的单链表,并输出结点值; 2、从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”; 3、从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果; 4、从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果;
时间: 2024-01-07 19:04:44 浏览: 78
好的,我会帮你解答这个问题。
首先,我们需要定义一个表示单链表结点的结构体:
```c
struct Node {
int data; // 结点数据
struct Node *next; // 指向下一个结点的指针
};
```
接着,我们可以编写一个函数用于创建带表头的单链表,并输出结点值:
```c
void createList(struct Node **head) {
*head = (struct Node *)malloc(sizeof(struct Node)); // 创建表头结点
(*head)->next = NULL; // 初始化为空链表
printf("请输入20个整数:\n");
struct Node *p = *head; // p指向当前链表的最后一个结点
for (int i = 1; i <= 20; i++) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node)); // 创建新结点
scanf("%d", &newNode->data);
newNode->next = NULL;
p->next = newNode; // 将新结点插入到链表尾部
p = newNode;
}
printf("单链表的结点值为:");
struct Node *q = (*head)->next; // q指向第一个数据结点
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}
printf("\n");
}
```
然后,我们编写一个函数用于在单链表中查找特定的结点:
```c
void searchNode(struct Node *head) {
int x;
printf("请输入要查找的整数:");
scanf("%d", &x);
struct Node *p = head->next;
while (p != NULL) {
if (p->data == x) {
printf("找到了\n");
return;
}
p = p->next;
}
printf("找不到\n");
}
```
接下来,我们编写一个函数用于在指定位置插入一个新结点:
```c
void insertNode(struct Node *head) {
int i, x;
printf("请输入要插入的位置和数值(用空格隔开):");
scanf("%d %d", &i, &x);
struct Node *p = head;
for (int j = 1; j < i && p != NULL; j++) {
p = p->next;
}
if (p == NULL) {
printf("插入位置不合法\n");
return;
}
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node)); // 创建新结点
newNode->data = x;
newNode->next = p->next;
p->next = newNode;
printf("单链表的结点值为:");
struct Node *q = head->next;
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}
printf("\n");
}
```
最后,我们编写一个函数用于删除指定位置的结点:
```c
void deleteNode(struct Node *head) {
int i;
printf("请输入要删除的位置:");
scanf("%d", &i);
struct Node *p = head;
for (int j = 1; j < i && p != NULL; j++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
printf("删除位置不合法\n");
return;
}
struct Node *q = p->next;
p->next = q->next;
free(q);
printf("单链表的结点值为:");
struct Node *r = head->next;
while (r != NULL) {
printf("%d ", r->data);
r = r->next;
}
printf("\n");
}
```
完整代码如下:
阅读全文