这个有序循环链表是在Visual Studio中完成的,在使用malloc创建链表的时候需要对是否正确分配存储空间进行判断,否则会报错。通过设置结束标识符,实现在while循环中无限制创建结点直至输入结束符。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100 //设置监督元的值
//定义链表结构体
typedef struct Node
{
int data;
struct Node *next;
}node,*ptr;
//创建有序循环链表
ptr Sort_Link(ptr L) //输入需要构造的链表L和设置结束符号End_elem
{
ptr newsnode, head, f, s, p;
int x;
printf("请输入需要的值:\n");
scanf_s("%d", &x);
head = L;
while (x != -1) //设置输入“-1”结束
{
newsnode = (ptr)malloc(sizeof(Node));
if (!newsnode)
{
printf("内存分配不成功!\n");
return newsnode;
}
else
{
p = newsnode;
p->data = x;
f = head, s = f->next;
while (s->data < x) //对输入元素的值进行比较
f = s, s = s->next; //若值大则插入位置指针后移
f->next = p, p->next = s;//在f,s之间插入newsnode
scanf_s("%d", &x); //下一个元素
}
}
//输出创建的有序循环链表
p = head;
printf("\n创建有监督元的有序循环链码为:\n");
while (p->next != head)
{
p = p->next;
printf("%5d", p->data);
}
return head;
}
//初始化
ptr InitLink()
{
ptr L;
L = (ptr)malloc(sizeof(Node));
if (!L)
exit(-1);
memset(L, 0, sizeof(ptr));
L->next = L;
L->data = MAX;
return L;
}
int main()
{
ptr L;
L = InitLink();
Sort_Link(L);
}