问题及问题要求:
实例代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <malloc.h>
#define N 5
typedef struct NODE
{
int data; //结点的数据
struct NODE *next; //指向下一结点
} Node;
Node *head=NULL; //将链表头定义为全局变量,以便于后面操作
void make_list3(); //建立链表
void out_list(); //输出链表
void insert(int x); //将值为x的结点插入到有make_list3建立起来的有序链表中
int main()
{
make_list3();
out_list();
insert(5);
out_list();
return 0;
}
void make_list3()
{
int n;
Node *p,*q,*t;
printf("输入若干正数(以0或一个负数结束)建立链表:" );
scanf("%d",&n);
while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束
{
t=(Node*)malloc(sizeof(Node)); //新建结点
t->data=n;
t->next=NULL; //新建的结点指向原先的链表头
if(head==NULL){
head = t;
}else{
if(n<=head->data){ //新加入的结点值比当前最小的头结点还小,该新结点为新的头结点
t->next = head;
head = t;
}else{
p = head;
q = p->next;
while(q!=NULL&&n>q->data){
p = q;
q = p->next;
}
if(q==NULL){
p->next = t;
}else{
t->next = q;
p->next = t;
}
}
}
scanf("%d", &n); //输入下一个数,准备建立下一个结点
}
return;
}
void insert(int x){
Node *t,*p,*q;
t = (Node*)malloc(sizeof(Node));
t->data = x;
t->next = NULL;
if(head==NULL){
head = t;
}else{
if(x<=head->data){ //插入的结点为首结点
t->next = head;
head = t;
}else{ //找到合适的位置进行插入,链表中至少包含一个结点
p = head;
q = p->next;
while(q!=NULL&&x>q->data){ //直到找到插入的位置后停止
p = q;
q = p->next;
}
if(q == NULL){
p->data = x;
}else{
t->next = q;
p->next = t;
}
}
}
return;
}
void out_list()
{
Node *p=head;
printf("链表中的数据为:\n");
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
return;
}
未展示函数:


运行演示:
总结:
这道题教会我们建立顺序链表,向有序链表中插入数据,链表中结点的删除,链表中的数据查找。
这些应用会让我们对链表的存储方式理解的更加透彻。