编写一在双向循环链表中值x结点之前插入值为y结点的算法

作者&投稿:蓬南 (若有异议请与网页底部的电邮联系)
编写算法实现删除双向循环链表(线性表)中所有值为X的元素。~

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);

void insert_node(Node current_node, Node new_node){
new_node->next = current_node->next;
current_node->next->prev = new_node;
current_node->next = new_node;
new_node->prev = current_node;

}
给你看一下这个过程的图解(画得有点乱)



void InsertDLink(DuLinkList p,int y)
{
     DuLinkList s;
     s = (DuLinkList)malloc(sizeof(DuLNode));  //动态创建插入结点s,存储y的值
     s ->data = y;
     while(p->data != x)                       //当p的值不为x时,向下查找,直到为x
    {
          p = p->next;
    }
    s->prior = p->prior;                       //把结点s插入到p之前
    p->prior ->next = s;
    s->next  = p;
    p->prior = s;
}



什么是双向循环链表?
若某链表最常用的操作是在最后一个结点之后插入一个结点或者删除最后一个结点,则采用带头结点的双循环链表存储方法最节省。双向链表是每个结点除后继指针外还有一个前驱指针。和单链表类同,双向链表也有带头结点结构和不带头结点结构两种,带头结点的双向链表更为常用;另外,双向链表也可以有循环和非循环...

求c语言双向循环链表的一个应用例子
———你的程序可以命题为,一个有序的数据集,(比如档案)按某条件排序 ,用双向链表存,输入文件编号 1打印出该档案的其他信息( 如日期 )2打印出该档案前N条信息 3打印出该档案后N条信息 功能2和3写成函数传入参数为结点指针---这样在函数你就会发现链表的结构优点了 ...

数据结构 程序设计 用双向循环链表建立一个学生管理系统,要求实现插入...
用一下我的吧 是我大一时写的 有什么问题可以追问 include<iostream.h> include<string.h> typedef struct { char name[10];long num;float score;}student;void creat(student stu[]);void insert(student stu[]);void Delete(student stu[]);void lookup(student stu[]);void update(student ...

在带头结点的双向循环链表中元素x结点之后插入y
设pre和next分别为指向前一个和后一个元素的指针,则:y->next = x->next;y->pre = x;x->next->pre = y;x->next = y;

在循环双链表的p所指结点之后插入s所指结点的操作是??
根据你的描述,可以是这样:(1)申请一个新结点s;(2)用中间变量item指向p的下一个结点;(3)将s的next指针域指向item所指向的结点(即p所指结点的后一个结点);(4)将s的prior指针域指向p结点;(5)将item的prior指针域指向s;(6)将p的next指向s;完成双向链表结点插入操作 ...

数据结构 双向循环链表问题
算法思想:指针扫描链表,遇到偶数位的先保存此节点,然后删除,再然后把此节点插入到另外一个链表中,最后进行连接即可,基本的插入删除操作,这个程序我写得还有bug:只能对偶数个数字进行重新排序,对奇数的要修改q指针把q->next!=NULL改为q!=NULL include<stdio.h> include<stdlib.h> typedef struct...

什么是双向循环链表?
1、带头节点的双向循环链表L为空的条件是:l==l->next。2、双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。3、循环链表是另一种...

双向循环链表是什么?
因此,由于单链表的缺点,引入了双向链表。1.双向链表(DoubleLinkedList)的概念双向链表指的是构成链表的每个结点中设立两个指针域:一个指向其直接前驱的指针域prior,一个指向其直接后继的指针域ne*t。这样形成的链表中有两个方向不同的链,故称为双向链表。2.双向循环链表将双向链表的头结点和尾...

写出下图双链表中对换值为23和15的两个结点互换位置时修改指针的有关...
节点互换位置不一定整个节点动,直接换data即可。p是要删除的结点,q是p的前一个结点 q->next = p->next;\/\/删除的结点的后一结点的首地址赋值给删除的结点的前一结点的next p->next->prior = q;\/\/删除的结点的后一结点的prior指向删除的结点的前一结点的首地址free(p);...

在一个双向循环链表中,找出指针域为空的结点。
下面说法错误的是(B)A 对循环链表来说,从表中任一结点出发都能通过前后操作而扫描整个循环链表 B 对单链表来说,只有从头结点开始才能扫描表中全部结点 C 双链表的特点是找结点的前趋结点和后继结点很容易 D 对双链表来说,结点*p的存储位置即存放在其前驱结点的后继指针域中,也存放在它的后...

喜德县19699545339: 双链表中在值为x的结点前插入值为y的结点 -
松印百咳: PriorInsert函数改动下就可以了,如下: void PriorInsert(dlink *L, ElemType x, ElemType y) { dlink *p, *q, *s; p = L; q=p->next; while (q&&q->data != x) { p = q; q = q->next; }//改动 if(q){ s = (dlink *) malloc(sizeof(dlink)); s->data = y; s->next=q; s->prior=p ; p->next=s; q->prior=s; } }

喜德县19699545339: 编写在双向链表第i个节点前插入一个节点的程序 -
松印百咳: 假设要插入的节点为r 设如果链表为空,就赋值给头指针,否则移到要插入的位置比如插入p的后面 r->next = p->next->next p->next = r; r->last = p; r->next->last = r;

喜德县19699545339: 在双向链表中的值为a,b的两个结点之间插入值为x的节点 .....怎么编程序 -
松印百咳: 搞错了,以为单向链表.node *xNode = new node; xNode->value = x; xNode->next = a->next; xNode->pre = b->pre; a->next = xNode; b->pre = xNode;

喜德县19699545339: c语言数据结构编成:实现在一个带头结点的单链表中值为x的结点之前插入n个节点,在值为x的结点之后删除m个结点. -
松印百咳: 单链表描述 typedef struct LNode { Elemtype data; struct LNode *next; }LNode *LinkList; 插入函数 void insert(LinkList &L,int i,Elemtype e) { LNode p,s; int j=0; p=L; while(p&&jnext; ++j; } s=(LinkList*)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; }

喜德县19699545339: 1.在循环双向链表中在指针p所指结点前插入一个结点*s的语句,空格处怎么填啊?求大神, -
松印百咳: s->next=p; s->prior=p->prior; p->prior->next=s; p->prior=s; s->next=p->next>next; p->next->pre = s->next; s->pre=p->next; p->next=s; 扩展资料: 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内...

喜德县19699545339: 求算法:在双向链表的值为a,b的两个结点之间插入值为x的结点?要完整的代码.急急急.... -
松印百咳: 我有现成的代码,有插入和删除功能,只是插入在i处,所以你得稍微修改一下吧(有注释啊)#include<malloc.h>#include<iostream> //包含头文件信息 typedef int ElemType; using namespace std; typedef struct LNode { ElemType data; struct ...

喜德县19699545339: 试编制一个算法,统计双向链表中值为x的元素个数 -
松印百咳: 算法的话就简单了. int Statistics(struct Link *head, int x) {int count=0;struct Link *p=head;//带头结点的链表while (p->next != NULL){if (p->next->data == x){count++;}p = p->next;}return count; }

喜德县19699545339: 设计一个算法 在一个单链表中值为Y的结点前面插入一个值为X的结点 -
松印百咳: struct LinkList {int data;struct LinkList *next; }int func(LinkList *head, int x, int y) {LinkList *p = head;LinkList *temp;if((temp = (LinkList *)malloc(sizeof(LinkList))) == NULL)return -1;temp->data = x;while(p != NULL){if(p->next->data == y){...

喜德县19699545339: 急!!请高手帮我设计一个算法!在一个单链表中值为Y的结点前面插入一个值为X的结点,即使值为X的结点成为值为Y的结点的前驱结点? -
松印百咳: 在链表前加一个空的head指针,p指向head,q指向原链表头,然后向后遍历表,发现q的key值=y则new一个pointer,令其后继为q,再令p的后继为pointer,即完成一次插入.注意顺序.

喜德县19699545339: 下面有问号的两行C语言看不懂是什么意思?(在双向链表L中第i个位置之前插入元素x) -
松印百咳: 第一个问号,其实你的理解是对的,程序写得不好.第二个问号,其实就是让s的next指针指向NULL,它写得太啰嗦了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网