使用c++创建一个递增有序的单链表?请写出算法并实验
时间: 2024-05-09 11:20:20 浏览: 122
算法:
1. 定义一个头节点head,一个指针p指向头节点。
2. 循环输入数据,每输入一个数据,就新建一个节点,节点的data域为输入的数据。
3. 每次插入新节点时,从头节点开始遍历,找到第一个大于等于新节点的节点,将新节点插入其前面。
4. 插入完成后,p指向新节点的下一个节点,继续输入数据和插入操作,直到输入完毕。
实验代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
int main(){
Node *head = (Node*)malloc(sizeof(Node)); // 定义头节点
head->next = NULL; // 头节点的指针域初始化为NULL
Node *p = head; // 定义指针p指向头节点
int num;
printf("请输入数据,以-1结束:");
scanf("%d", &num);
while(num != -1){ // 循环输入数据
Node *newNode = (Node*)malloc(sizeof(Node)); // 新建节点
newNode->data = num; // 节点的data域为输入的数据
Node *q = head;
while(q->next != NULL && q->next->data < num){ // 遍历链表,找到第一个大于等于新节点的节点
q = q->next;
}
newNode->next = q->next; // 将新节点插入其前面
q->next = newNode;
p = p->next; // 指针p指向新节点的下一个节点
printf("请输入数据,以-1结束:");
scanf("%d", &num);
}
printf("链表中的数据为:");
Node *q = head->next;
while(q != NULL){ // 遍历链表,输出数据
printf("%d ", q->data);
q = q->next;
}
printf("\n");
return 0;
}
```
阅读全文