先建立有序(从小到大)带有头节点的单向链表,再插入一个节点,使之还是有序,并将链表输出。 #include "stdlib.h" #include "stdio.h" #define N 10 typedef struct list { int data; struct list *next; }NODE; NODE *creat_list(int *a,int n) { } insNode(NODE *head,int x) { } print(NODE *h) //打印链表内容 { NODE *p; p=h->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } int main() { int i,j,x,a[N]={1,13,25,37,9,911,133,415,147,19}; NODE *head; head=creat_list(a,10); scanf("%d",&x); insNode(head,x); print(head); } 使用c语言编写
时间: 2024-03-22 11:38:25 浏览: 91
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct list {
int data;
struct list *next;
} NODE;
NODE *creat_list(int *a, int n) {
NODE *head, *p, *q;
head = (NODE *) malloc(sizeof(NODE));
head->next = NULL;
q = head;
for (int i = 0; i < n; ++i) {
p = (NODE *) malloc(sizeof(NODE));
p->data = a[i];
p->next = q->next;
q->next = p;
q = p;
}
return head;
}
void insNode(NODE *head, int x) {
NODE *p, *q, *r;
p = head->next;
q = head;
while (p != NULL) {
if (p->data > x) break;
q = p;
p = p->next;
}
r = (NODE *) malloc(sizeof(NODE));
r->data = x;
r->next = q->next;
q->next = r;
}
void print(NODE *h) {
NODE *p;
p = h->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
int i, j, x, a[N] = {1, 13, 25, 37, 9, 911, 133, 415, 147, 19};
NODE *head;
head = creat_list(a, 10);
scanf("%d", &x);
insNode(head, x);
print(head);
return 0;
}
```
这个程序首先使用前插法将数组的内容建立为一个有序(从小到大)的带有头节点的单向链表,然后从用户输入中读取一个整数,将其插入到链表中,并保持链表的有序性。在 `insNode` 函数中,我们首先遍历链表,找到第一个比要插入的值大的节点,然后在其前面插入一个新节点。在 `print` 函数中,我们从链表的第二个节点开始遍历,并打印每个节点的数据。
阅读全文