已知一双向循环链表,从第二个节点至表尾递增有序(设a1<x<an)。

试编写程序,将第一个节点删除并插入表中适当位置,是整个链表递增有序。求帮忙,谢了!... 试编写程序,将第一个节点删除并插入表中适当位置,是整个链表递增有序。
求帮忙,谢了!
展开
 我来答
wqj10030022
2020-02-23
知道答主
回答量:7
采纳率:0%
帮助的人:4298
展开全部

#include "pch.h"
#include <iostream>
#include<stdio.h>
int n, i;
typedef struct DuLNode
{
int data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode, *DuLinkList;//循环双向链表结构

































int InitList_DUL(DuLinkList &L)//初始化一个带头结点的双向循环链表































{































L = (DuLNode*)malloc(sizeof(DuLNode));































L->next = L;































L->prior = L;































if (!L)































exit(OVERFLOW);































return 1;































}































void CreateList_DUL(DuLinkList &L)//正序创建一个带头结点的双向循环链表;































{































DuLinkList p, s;//中间变量































printf_s("请输入链表长度:\n");































scanf_s("%d", &n);































p = L;































printf_s("请输入元素:");































for (i = n;i > 0;i--)































{































s = (DuLinkList)malloc(sizeof(DuLNode));































scanf_s("%d", &s->data);































p->next = s;































s->prior = p;































p = s;































}































p->next = L;//首位连接;































L->prior = p;































}

int resetting(DuLinkList &L)































{































DuLinkList first;































DuLinkList h;































DuLinkList p;//遍历指针p































h = L->next;//原第一个结点h;































first= h;//first指向第一个结点;































h=first->next;//删除第一个结点;































L->next = h;































first->prior = L;































p = h;































while(first->data>p->data)p = p->next;//开始遍历链表通过比较数值寻找合适插入位置;































first->next =p; //进行插入,改变前后结点;































first->prior = p->prior;































p->prior->next = first;































p->prior = first;































return 0;































}































int display(DuLinkList L)//输出双向循环链表;































{































DuLinkList p;































p = L->next;































while (p->next!=L->next)//这里不能再用和单链表一样的循环条件了;应当在将再次遍历时跳出,否则会陷入死循环;































{































printf_s("%d ", p->data);































p = p->next;































}































return 0;































}































int main()































{































DuLinkList L;































InitList_DUL(L);//定义































CreateList_DUL(L);//初始化、创建双向循环链表L;































resetting(L);//引用重构函数;































display(L);//最后输出结果;































}

最后结果就是这样:


=-=想必是在学数据结构,我还是大一学的C语言,快两年没动了,写起来忒费劲了

很多细节地方我也不太懂,但最后能运行起来就是了==

wkguxin
2012-09-24
知道答主
回答量:28
采纳率:0%
帮助的人:24.1万
展开全部

先设一个指针p,用来指向第一个节点,防止在链表上删除后没有指针指向它,删除过程如下:

p=h;

h=p->next;

r->next=h;

h->pre=r;

此时第一个节点被删除,同时p指向该节点。

下面通过比较找到要插入的位置。

先设置一个指针q用来遍历。

q=h;

比较q->data与p->data的大小,如果p->data大,则向后移动q,即q=q->next;

找到合适位置后操作如下:

p->next=q->next;

q->next->pre=p;

p->pre=q;

q->next=p;

插入完成。

注意删除和插入时操作的顺序,否则可能使节点断掉,没法连起来。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式