数据结构与算法实验笔记
1. 创建并操作循环链表
【问题描述】
输入n个整数,创建一个双向循环链表进行存储。这些整数从第二个开始,递增有序(设a2<a3<…<an) (ai为第i个整数)。
试编写程序,创建双向循环链表,依次将输入的整数存储在该链表的各节点中。然后,将第一个结点删除并插入链表中的适当位置,使整个链表递增有序。
【输入形式】
先输入整数的个数,再输入整数列。
【输出形式】
以整数递增的顺序,依次输出双向循环链表各个节点存储的整数。
【样例输入】
5 3 1 2 4 5
【样例输出】
1 2 3 4 5
【样例说明】
输入数据的第一个数是整数的个数,其后是整数列,该整数列从第二个开始,递增有序,数据间以空格分开。
代码
#include<stdio.h>
#include<malloc.h>
struct node {
int data;
struct node* next;
struct node* prior;
};
struct node* Linkcreat(int n) {
//创建双向循环链表
struct node* head = (struct node*)malloc(sizeof(struct node));
head->next = head->prior = head;
struct node* p = head;
for (int i = 0; i < n; i++)
{
struct node* q = (struct node*)malloc(sizeof(struct node));
scanf("%d",&q->data);
p->next = q;
q->prior = p;
q->next = head;
head->prior = q;
p = q;
}
return head;
}
void Linkchange(struct node * head) {
//改变双向循环链表的顺序
struct node* p = head->next;
head->next = p->next;
p->next->prior = head;
struct node* q = head->next;
while (p->data > q->data && q!= head) {
q = q->next;
}
p