双链表的插入结点算法问题 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 0%
双链表插入结点问题~~
[code=C/C++][/code]#include "stdio.h"rn#include "stdlib.h"rn/*双向链表的存储结构*/rntypedef int ElemType;rntypedef struct DuLNodern ElemType data;rn struct DuLNode *prior;rn struct DuLNode *next;rnDuLNode;rntypedef DuLNode *DuLinkList;rnrnvoid InitDul_Node(DuLinkList *LHead)rn *LHead = (DuLNode*)malloc(sizeof(DuLNode));rn (*LHead)->next = NULL;rn (*LHead)->prior = NULL;rn (*LHead)->data = 0;rnrnrnDuLNode* CreateDul_Node(ElemType e)//创建<em>双链表</em>中的<em>结点</em>rnrn DuLNode *p = (DuLNode*)malloc(sizeof(DuLNode));rn p->data = e;rn p->prior = NULL;rn p->next = NULL;rn return p;rnrnrnvoid ListInsert_DuL(DuLinkList *L,int i,DuLNode *New_node)//<em>双链表</em><em>插入</em>函数rnrn if(NULL == *L)rn *L = New_node;rn return;rn rn DuLNode *p = *L;rn int j = 0;rn while(jnext;rn rn New_node->prior = p->prior;rn p->prior->next = New_node;rn New_node->next = p;rn p->next = New_node;rnrnrnvoid Dul_Traverse(DuLinkList *L)rn DuLNode *p = (*L)->next;rn while(p)rn printf("",p->data);rn p = p->next;rn rnrnrnint main()rnrn DuLinkList Dul_HeadA=NULL;rn InitDul_Node(&Dul_HeadA);rn printf("Insert Sample nodes:\n");rn ListInsert_DuL(&Dul_HeadA,1,CreateDul_Node(10));rn /*int i;rn int a[] = 11,54,25,18,36;rn for(i=0;i<5;i++)rn ListInsert_DuL(&Dul_HeadA,1,CreateDul_Node(a[i]));rn */rn Dul_Traverse(&Dul_HeadA);rn return 0;rnrn[code=C/C++][/code]
关于双链表插入结点
请大家看这个程序:rn[code=C/C++]#include rn#include rn#include rn#define N sizeof(struct node)rnrnstruct nodernrn int num;//数据域rn int feq;//频度域rn struct node *prior;rn struct node *next;rn;rnrnstruct node *creat(int n)//创建双向循环链表,n为链表长度,head为头<em>结点</em>,feq为n值出现的次数。rnrn struct node *head,*p,*last;rn head=(struct node *)malloc(N);rn head->num=0;rn head->feq=0;rn last=head;rn for(int i=0;inum);rn p->feq=0;rn last->next=p;rn p->prior=last;rn last=p;rn rn last->next=head;rn head->prior=last;rn return head;rnrnrnvoid locate(struct node *head,int x)//查找数据域num为x的<em>结点</em>,然后将该<em>结点</em>的频度域feq+1,再根据频度域按非递增对链表进行排序rnrn struct node *q=head->next,*p=q,*pre=q;rn while(q!=head)//查找x的在链表中的位置rn rn if(q->num==x) rn rn q->feq++;rn break;rn rn q=q->next;rn rn if(q==head) //当链表中无x时rn rn printf("can't find x,please input another integer!\n");rn return;rn rn else if(q==head->next) //当x在首元<em>结点</em>时,将该<em>结点</em>取出rn rn head->next=q->next;rn head->next->prior=q->prior;rn rn else //其他情况当链表中含有x时,将该<em>结点</em>取出rn rn q->prior->next=q->next;rn q->next->prior=q->prior;rn rnrn while(p!=head&&p->feq>=q->feq)//寻找<em>插入</em>的位置rn rn pre=p;rn p=p->next;rn rn if(p==pre)//当<em>插入</em>位置在首元<em>结点</em>时rn rn q->next=p;rn p->prior=q;rn head->next=q;rn q->prior=head;rn rn else //当在其他位置<em>插入</em>时rn rn pre->next=q;rn q->prior=pre;rn q->next=p;rn p->prior=q;rn rnrnrnvoid main()rnrn struct node *head,*p;rn int x,n;rn scanf("%d",&n);rn head=creat(n);rn while(1)rn rn printf("input x:");rn if(scanf("%d",&x)==0) break;rn locate(head,x);rn p=head->next;rn for(int i=0;ifeq,p->num);rn p=p->next;rn rn rn[/code]rn上面程序错误仅在<em>结点</em><em>插入</em>位置在首元<em>结点</em>的情况,如:rn当输入为:rn5rn1 2 3 4 5rnx=1rn输出为:rn0 2rn0 3rn0 4rn0 5rn0 0rn当输入为:rn5rn1 2 3 4 5rnx=2rn输出为:rn1 2rn0 1rn0 3rn0 4rn0 5rn请大家看看<em>问题</em>在哪!rnrnrn
链表插入结点算法
链表<em>结点</em><em>插入</em><em>算法</em>
双链表插入问题
<em>双链表</em><em>插入</em>中,s->prior=p->prior; rn p->prior->next=s rn s->next=p; rn p->prior=s; rnrns->prior=p->prior;是什么意思,为什么要把p指针赋值给s指针,还有s->next和s->prior->next是否等效
双链表插入
c# <em>双链表</em><em>插入</em> list <em>插入</em> 代码
删除双链表的一个结点
写一个函数 删除一个<em>双链表</em>的一个<em>结点</em> rn
一道笔试找错题-双链表插入结点问题
struct nodernrn char value;rn node*prev,*next;rn;rnvoid insert_befor(node*pNode,node*pNewNode)rnrn if(pNode&&pNewNode)rn rn pNewNode->next=pNode;rn pNewNode->prev=pNode->prev;rn pNode->prev->next=pNewNode;rn pNode->prev=pNewMode;rn rnrn请找出错误,并尽量改正
主函数调用双链表插入问题
我看了C和指针<em>双链表</em>例题。自己写了一下,想试试主函数调用<em>双链表</em>的<em>插入</em>。没成功,不了解什么<em>问题</em>。[code=C/C++]#include rn#include rntypedef struct testrnrn int value;rn struct test *fwd;rn struct test *bwd;rnNode;rnint dll_insert(register Node *rootp,int value)rnrn register Node *now;rn register Node *next;rn register Node *newnode;rn for(now=rootp;(next=now->fwd)!=NULL;now=next)rn rn if(next->value == value)rn return 0;rn if(next->value > value)rn break;rn rn newnode=(Node *)malloc(sizeof(Node));rn if(newnode==NULL)rn rn return -1;rn rn newnode->value=value;rn newnode->fwd=next;rn now->fwd=newnode;rn if(now!=rootp)rn newnode->bwd=now;rn elsern newnode->bwd=NULL;rn rn if(next!=NULL)rn next->bwd=newnode;rn elsern rootp->bwd=newnode;rn rn return 1;rnrnint main()rnrn Node *rootp=NULL;rn int n;rn while(scanf("%d",&n),n)rn rn dll_insert(rootp,n);rn rn while(rootp->bwd!=NULL)rn rn printf("%d ",rootp->value);rn rootp=rootp->fwd;rn rn return 0;rn[/code]
带头结点的带环双链表的基本操作
dblinklist.h //带头<em>结点</em>的带环<em>双链表</em> #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define DataType char #define TESTHEAD printf(&quot;\n=======%s=======\n&quot;, __FUNCTION__); typedef struct dblinklist { Data...
CTreeCtrl插入结点问题
我的结构是:rn |- 语文1rn |- 数学1rn |- 英语1rnrn我想在<em>插入</em>“语文2”的时候,该项排在“语文1”下面rn <em>插入</em>“数学2”的时候,该项排在“数学1”下面rnrn请问,该怎么做???
一个结点插入问题
向一个带头<em>结点</em><em>结点</em>HS的链表中<em>插入</em>一个s所指<em>结点</em>时,则执行( )rnrn书中的选项是:rn(A)HS-→next=s;rn(B)s-→next=HS-→next;HS-→=s;rn(C)s-→next=HS;HS=s;rn(D)s-→next=HS;HS=HS-→next;rnrn书上的答案选(B)rn --P27.2rn以下是我所画的示意图,麻烦热心人请点击如下地址:rnrnrn——————————————————rn我的<em>问题</em>1:rn[color=#FF0000]不知以下我所画的图示[/color]是否正确,请热心人帮忙确认并指导,谢谢rn[url=http://img458.ph.126.net/tg789kGEBCkqRQ2o6dPqXA==/2545659689372018223.jpg][/url]rnrn我的<em>问题</em>2:rn在选项(B)中“s-→next=HS-→next(红色);HS-→=s”中,是否可以写成[color=#FF0000]HS-→next=s-→next[/color]啊,假如,[color=#99CC00]将‘=’两边的颠倒[/color],是否都是表达同样的意思啊。rn
二叉排序树的结点插入问题
那么请问下面的<em>算法</em>是否正确。此<em>算法</em>是教材上的。rn在排序树中<em>插入</em>一个<em>结点</em>(递归<em>算法</em>),rnvoid insert(Bitree *T,Bitree new)//为什么用二级指针rn rn if(!(*T)) //最后T指向空rn *T=new;//T指向新<em>结点</em>,怎么会连接rn else if(new->data==(*T)->data) return;rn else if(new->datadata)rn insert(&(*T)->lchild,new);rn elsern insert(&(*T)->rchild,new);rn rn我的<em>问题</em>是为什么要用二级指针?
链表插入结点问题
#includern#includernint main()rnstruct studentrnlong int num;rnfloat score;rnstruct student *next;rn;rnstruct student *head=NULL;rnstruct student *p1,*p2;rnint n=0;rnint m;rnp1=p2=(struct student *)malloc(sizeof(struct student));rnprintf("Please enter data:\n");rnscanf("%ld,%f",&p1->num,&p1->score);rnwhile(p1->num!=0)rnif(n==0)rnhead=p1;rnelsernp2->next=p1;rnp2=p1;rnp1=(struct student *)malloc(sizeof(struct student));rnscanf("%ld,%f",&p1->num,&p1->score);rnn++;rnrnp2->next=NULL;rnif(n==0)rnprintf("No data entered");rnelsernprintf("Here is the list:\n");rnp1=head;rnwhile(p1!=NULL)rnrnprintf("%ld,%f\n",p1->num,p1->score);rnp1=p1->next;rn[color=#FF0000]printf("将<em>结点</em><em>插入</em>到哪一个位置?\n");rnscanf("%d",&m);rnn=1;rnp1=head;rnwhile(nnext;rnp2->next=(struct student *)malloc(sizeof(struct student));rnp2->next->next=p1;rnprintf("<em>插入</em><em>结点</em>的数据:\n");rnscanf("%ld,%f",&p2->next->num,&p2->next->score);rnp1=head;rnwhile(p1!=NULL)rnrnprintf("%ld,%f\n",p1->num,p1->score);rnp1=p1->next;rn[/color]rn这个是我自己想当然写的一个链表<em>插入</em><em>结点</em>的代码…………红色部分是有<em>问题</em>的部分,暂时还找不出来,求指点。
XML结点插入问题
请问,如何在下面的xml中<em>插入</em>带属性的节点。rnrn在原来的xml中<em>插入</em>节点 rnrn原来的xmlrn[code=xml]rnrnrn rn stu1rn id1rn rn rn prof1rn id2rn rnrn[/code]rnrn需要修改成的xmlrn[code=xml]rnrnrn rn rn stu1rn id1rn rn rn prof1rn id2rn rn rnrn[/code]
CtreeCtrl 插入结点问题
特别的<em>问题</em>。rn建了棵树 rn a rn |-c rn |-d rnrn然后在树<em>结点</em><em>插入</em><em>结点</em>到drn a rn |-c rn |-d rn |- newrn并且选择的焦点处于new的位置:rnrn本来觉得很容易rn[code=C/C++]rn //<em>插入</em><em>结点</em>rn HTREEITEM hItemTmp = m_FodderTree.InsertItem( hItem, "new");rn //展开此<em>结点</em>,以显示新<em>插入</em>的<em>结点</em>rn m_FodderTree.Expand(hItem,TVE_EXPAND);rn //选择上个<em>插入</em>的节点rn m_FodderTree.SelectItem(hItemTmp);rnrn CWnd *pWnd = m_FodderTree.SetFocus();rn m_FodderTree.EditLabel(hItemTmp);rn[/code]rnrn大家说会发生什么情况。rn大家来说说:rn为什么hItemTmp 的值已经不是新<em>插入</em>的<em>结点</em>的值了?
请教一个删除双链表重复结点问题
大家好,我想删除<em>双链表</em>的重复<em>结点</em>,但是出现了段错误,希望各位帮忙解决一下。代码如下:rndumplicate.crnrn#include rn#include rn#include rnrntypedef struct student *stud;rnstruct studentrnrn char name[20];rn int score;rn stud prev,next;rn;rn#define LEN sizeof(struct student)rnrn/*void delsame(stud head)rnrn stud p,p1,p2,temp;rn p=head->next;rn while(p!=NULL)rn rn p2=p->next;rn p1=p;rn while(p2!=NULL)rn rn temp=p2;rn p2=p2->next;rn if(!strcmp(p->name,temp->name))rn rn p1->next=p1->next->next;rn p1->next->next->prev=p1;rn free(temp);rn continue;rn rn p1=p1->next;rn rn p=p->next;rn rn //return head;rn*/rnrnstud delsame(stud head)rnrn stud p,p1,p2;rn p=head->next;rn p1=p;rn while(p!=NULL)rn rn p2=p->next;rn while(p2!=NULL)rn rn if(strcmp(p2->name,p->name))rn rn p1=p2;rn p2=p2->next;rn rn elsern rn p1->next=p2->next;rn p2->next->prev=p1;rn free(p2);rn p2=p1->next;rn p1=p2->prev;rn rn rn p=p->next;rn rn return head;rnrnrnstud create()rnrn stud head,p,p1;rn int i=0,n=0;rn head=(stud)malloc(LEN);rn if(head==NULL)rn rn printf("分配内存错误!\n");rn exit(EXIT_FAILURE);rn rn head->prev=NULL;rn head->next=NULL;rn p=head;rn printf("请输入学生数目:\n");rn scanf("%d",&n);rn for(i=0;inext=p1;rn printf("请输入第%d个人的姓名:\n",i+1);rn scanf("%s",p1->name);rn printf("请输入第%d个人的分数:\n",i+1);rn scanf("%d",&p1->score);rn p1->prev=p;rn p1->next=NULL;rn p=p1;rn if(i==0) head=p;rn rn return head;rnrnrnvoid output(stud head)rnrn stud p;rn int i=0;rn if(head==NULL)rn rn printf("没有任何学生信息!\n");rn exit(EXIT_SUCCESS);rn rn p=head;rn printf("学生信息如下:\n");rn while(p!=NULL)rn rn i++;rn printf("第%d个学生姓名为:",i);rn printf("%s\n",p->name);rn printf("第%d个学生分数为:",i);rn printf("%d\n",p->score);rn p=p->next;rn rn printf("一共有%d个学生。\n",i);rnrnrnint main()rnrn stud head;rn head=create();rn output(head);rn printf("删除重复<em>结点</em>:\n");rn head=delsame(head);rn output(head);rn return 0;rnrn运行结果:rn请输入学生数目:rn4rn请输入第1个人的姓名:rnDavidrn请输入第1个人的分数:rn88rn请输入第2个人的姓名:rnDavidrn请输入第2个人的分数:rn78rn请输入第3个人的姓名:rnDavidrn请输入第3个人的分数:rn77rn请输入第4个人的姓名:rnDavidrn请输入第4个人的分数:rn76rn学生信息如下:rn第1个学生姓名为:Davidrn第1个学生分数为:88rn第2个学生姓名为:Davidrn第2个学生分数为:78rn第3个学生姓名为:Davidrn第3个学生分数为:77rn第4个学生姓名为:Davidrn第4个学生分数为:76rn一共有4个学生。rn删除重复<em>结点</em>:rn段错误rnrn其中,注释掉的代码也同样出现了段错误。如何删除姓名相同的<em>结点</em>,只保留一个呢?这个函数该如何写?希望大家帮忙解决一下。谢谢。
双链表 插入,删除
#include &amp;lt;stdio.h&amp;gt; typedef struct dnode   //节点类型定义 {    char data;          //节点的数据   struct dnode *prior;//节点的前驱指针   struct dnode *next;//节点的后继指针 }dlinklist; //<em>双链表</em><em>插入</em> int d_list_insert(dlink...
插入双链表的详细解析
                #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;assert.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; typedef struct NODE {  struct NODE *f;  struct NODE *b;  int    value; }Node; int dl...
关于双链表插入有误?
typedef struct NODErn struct NODE* bwd;rn struct NODE* fwd;rn int value;rnNode;rnrnrnintrndll_insert (Node* rootp, int value)rnrn Node* this ;rn Node* next ;rn Node* newNode ;rn rn for( this = rootp; (next = this->fwd) != NULL; this = next )rn rn if ( next->value == value)rn return 0;rn if ( next->value > value)rn break; rn rn newNode = (Node* )malloc(sizeof ( Node ));rn if ( newNode == NULL )rn return -1;rn newNode->value = value; rn 。。。。。。。rn 。。。。。。。rnrn<em>问题</em>在:rn如果rootp为NULL,即链表为空,rn那么this = NULL;rnnext = NULL->fwd;rnrn
双链表的建立,删除及插入
#include #include using namespace std;struct DoubleList { int data; DoubleList *pre; DoubleList *next; };//<em>双链表</em>的建立 DoubldeList *CreatList() { DoubleList *head=new Dou
双链表程序插入和删除
帮忙看一下<em>双链表</em>程序是否正确????????rn#define NULL 0rntypedef struct dnodernint data;rnstruct dnode *prior,*next;rndlinklist;rnrndlinklist *createdlinklist()rn int data;rndlinklist *head,*s,*r;rnhead=(dlinklist *)malloc(sizeof(dlinklist));rnr=head;rnscanf("%d",&data);rnwhile(data!=-1)rns=(dlinklist *)malloc(sizeof(dlinklist));rns->data=data;rnr->next=s;rns->prior=r;rnr=s;rnscanf("%d",&data);rnrnr->next=head;rnreturn head;rnrnrnrnprintdlinklist(dlinklist *head)rndlinklist *p;rnp=head->next;rnif(head==NULL)rnprintf("dlinklist not exist:\n");rnelsernprintf("head");rnwhile(p!=head)rnprintf("->%3d",p->data);rn p=p->next;rn rn printf("->end\n");rn rn rnrn INSERTBEFORE(dlinklist *head,int x,int y)rn dlinklist *s,*p;rn s=(dlinklist *)malloc(sizeof(dlinklist));rn s->data=y;rn p=head->next;rn while((p!=head)&&(p->data!=x))rn p=p->next;rn s->prior=p->prior;rn s->next=p;rn p->prior->next=s;rn p->prior=s;rn rnrn DELETE(dlinklist *head,int m)rn dlinklist *p;rn p=head->next;rn while((p!=head)&&(p->data!=m))rn p=p->next;rn p->prior->next=p->next;rn p->next->prior=p->prior;rn free(p);rn rnrnmain()rndlinklist *head;rnint x,y,m;rnprintf("please input some numbers to create a dlinjklist:\n");rnhead=createdlinklist();rnprintf("The data are :\n");rnprintdlinklist(head);rnprintf("please input x and y,y will be insertwd before x:\n");rnscanf("%d%d",&x,&y);rnINSERTBEFORE(head,x,y);rnprintdlinklist(head);rnprintf("please input the number to ne deleted:\n");rnscanf("%d",&m);rnDELETE(head,m);rnprintdlinklist(head);rnprintf("\n");rnZ
双链表的创建,插入,删除
<em>双链表</em>的创建,<em>插入</em>,删除,尤其注意在表头,表中,表尾的<em>插入</em>和删除操作,同时考虑了空链表的创建、<em>插入</em>和删除
插入双链表中的错误
为了节约一个变量,改成这样却满足不了要求了:不能<em>插入</em>一个最大数(即在表末<em>插入</em>)rntypedef struct try node;rnstruct tryrn rn node *fwd;rn node *bwd;rn int num;rn ;rnnode *Indlist(node *root,int newnum) /**插值有序<em>双链表</em>*/rnrn /*root指向根节点 newnum为待<em>插入</em>值*/rn node **cur,*next;rn for (cur=&root; (next=(*cur)->fwd)!=NULL; cur=&next)rn rn if (next->num==newnum) return root; /*有相同数不<em>插入</em>*/rn if (next->num>newnum) break;rn rn next=(node *)malloc(sizeof(node));rn if (next==NULL) return root;rn next->num=newnum;rn next->bwd=(*cur!=root) ? *cur: NULL;rn next->fwd=(*cur)->fwd;rn if((*cur)->fwd!=NULL)rn (*cur)->fwd->bwd=next;rn elsern root->bwd=next;rn (*cur)->fwd=next;rn return root;rn
双链表插入 删除详解
节点结构: struct both_node { int key; struct both_node *prev; struct both_node *next; both_node(int k) :key(k),prev(NULL),next(NULL) {} }; 不带头节点的<em>双链表</em>实现<em>插入</em> 删除, <em>双链表</em> //<em>插入</em> void insert_both(both_no
插入结点
[code=C/C++]#includern#includernrnsteuct stu rnrn int num;rn char sex;rn struct stu *next;rn;rnrnstruct stu *creat(int n)rnrn int i;rn struct stu *head,*q,*p;rn for(i=0;inum,&q->sex);rn if(i==0)rn p=head=q;rn elsern rn p->next=q;rn p=q;rn rn rn p->next=NULL;rn return head;rnrnvoid print(struct stu *head,int n)rn rn int i;rn struct stu *p;rn p=head;rn printf("序号\t学号\t性别\n");rn for(i=0;inum,p->sex);rn p=p->next;rn rnrn rn rn rnrnstruct stu *del(struct stu *head,int num) //删除<em>结点</em>rnrn struct stu *p1; //指向要删除的<em>结点</em>rn struct stu *p2; //指向p1前一个<em>结点</em>rn rn if(head==NULL)rn rn printf("\n是空表\n");rnrn return head;rn rn p1=head;rn while(num!=p1->num && p1->next!=NULL) //查找要删除的<em>结点</em>rn rn p2=p1; //p2后移一个<em>结点</em>rn p1=p1->next; //p1后移一个<em>结点</em>rn rnrn if(num==p1->num)rn rn if(p1==head)rn head=p1->next;rn elsern p2->next=p1->next;rnrn free(p1);rn printf("delete: %d",num);rn n=n-1;rn rn elsern printf("not found\n");rnrn return head;rnrnrnmain()rnrn int n,k;rn struct stu *student;rn printf("输入待处理的个数:");rn scanf("%d\n",&n);rnrn student=creat(n);rn print(student,n);rnrn printf("输入要删除的学号(输入0则不删除):");rn scanf("%d",&k);rn while(k!=0)rn rn student=del(student,k);rn print(student,n);rnrn printf("输入要删除的学号:");rn scanf("%d",&k);rn rnrn rn 哪错了啊? rn [/code]
双链表插入的实现
还是一如既往先把这次例子的终极版展现出来://----------------------【<em>双链表</em>的<em>插入</em>(终极版)】--------------- //描述:通过创建<em>双链表</em>来进行新节点的<em>插入</em> //----------------------------------------------------------//----------------------【头文件部分】--------------
双链表插入函数实现的疑惑
C和C指针此书给出的最终版本与本人改进的一个版本,感觉改进的版本精炼些。但由于自己才学疏浅不自信,怀疑自己编写的版本有<em>问题</em>(否则书会用更好的版本),大家帮忙费力看看(新人没多少悬赏就意思意思,但有真诚的谢意):rntypedef struct NODE rnrn struct NODE *previous;rn struct NODE *next;rn int value;rnNode;rn说明:head为以包含<em>双链表</em>头指针和尾指针的结构体;rnC和C指针此书给出的版本:rnint dll_insert(Node* head,int value)rnrn Node *temp;rn Node *current;rn Node *previous;rnrn previous = head;rn current = previous->next;rn while( current!=NULL && current->valuenext;rn rnrn temp = (Node*)malloc(sizeof(Node));rn if(temp == NULL)rn return -1;rn temp->value = value;rnrn previous->next = temp;rn temp->next = current;rnrn if(previous == head)rn rn temp->previous = NULL;rn rn elsern rn temp->previous = previous;rn rnrn if(current != NULL)rn rn current->previous = temp;rn rn elsern rn head->previous = temp;rn rnrnrn自己根据以上版本写出的版本:rn说明:头和尾指针分别以单独指针给出rnint dll_insert(Node** head,Node**tail,int value)rnrn Node *temp;rn Node *current;rn Node **previous;rnrn previous = head;rn while((current = *previous)!=NULL && current->valuenext;rn rnrn temp = (Node*)malloc(sizeof(Node));rn if(temp == NULL)rn return -1;rn temp->value = value;rn rn *previous = temp;rn temp->next = current;rnrn if(current==NULL)rn rn temp->previous = *tail;rn *tail = temp;rn rn elsern rn temp->previous = current->previous;rn current->previous = temp;rn rn return 1;rn
双链表的各种基本算法问题
#includern#includerntypedef char ElemType;rntypedef struct DNodernrn ElemType data;rn struct DNode * prior;rn struct DNode * next;rn DLinkList;rnrnDLinkList *InitList(DLinkList *L)rnrn L=(DLinkList *)malloc(sizeof(DLinkList));rn L->prior=L->next=NULL;rn return L;rnrnrnvoid DestroyList(DLinkList *L)rnrn DLinkList *p=L,*q=p->next;rn while (q!=NULL)rn rn free(p);rn p=q;rn q=p->next;rn rn free(p);rnrnint ListEmpty(DLinkList *L)rnrn return(L->next==NULL);rnrnint ListLength(DLinkList *L)rnrn DLinkList *p=L;rn int i=0;rn while(p->next!=NULL)rn rn i++;rn p=p->next;rn rn return(i);rnrnrnvoid DispList(DLinkList *L)rnrn DLinkList *p;rn p=L->next;rn while(p!=NULL)rn rn printf("%c",p->data);rn p=p->next;rn rn printf("\n");rnrnrnint GetElem(DLinkList *L,int i,ElemType *e)rnrn int j=0;rn DLinkList *p=L;rn while(jnext;rn rn if(p==NULL)rn return 0;rn elsern rn *e=p->data;rn return 1;rn rnrnrnint LocateElem(DLinkList *L,ElemType e)rnrn int n=1;rn DLinkList *p=L->next;rn while(p!=NULL && p->data!=e)rn rn n++;rn p=p->next;rn rn if(p==NULL)rn return(0);rn elsern return(n);rnrnrnint ListInsert(DLinkList *L,int i,ElemType e)rnrn int j=0;rn DLinkList *p=L,*s;rn while(jnext;rn rn if(p==NULL)rn return 0;rn elsern rn s=(DLinkList *)malloc(sizeof(DLinkList));rn s->data=e;rn s->next=p->next;rn if(p->next!=NULL)p->next->prior=s;rn s->prior=p;rn p->next=s;rn return 1;rn rnrnrnint ListDelete(DLinkList *L,int i,ElemType e)rnrn int j=0;rn DLinkList *p=L,*q;rn while (jnext;rn rnif(p==NULL)rn return 0;rnelsern rn q=p->next;rn if(q==NULL) return 0;rn e=q->data;rn p->next=q->next;rn if(p->next!=NULL)p->next->prior=p;rn free(q);rn return 1;rn rnrnrn#includern#includerntypedef char ElemType;rn/*typedef struct DNodernrn ElemType data;rn struct DNode *prior;rn struct DNode *next;rnDLinkList;*/rnextern DLinkList *InitList(DLinkList *L);rnextern void DestroyList(DLinkList *L);rnextern int ListEmpty(DLinkList *L);rnextern int ListLength(DLinkList *L);rnextern void DispList(DLinkList *L);rnextern int GetElem(DLinkList *L,int i,ElemType *e);rnextern int LocateElem(DLinkList *L,ElemType e);rnextern int ListInsert(DLinkList *L,int i,ElemType e);rnextern int ListDelete(DLinkList *L,int i,ElemType e);rnvoid main()rnrn DLinkList *h=NULL;rn ElemType *e=NULL;rn printf("(1)初始化<em>双链表</em>h\n");rn h=InitList(h);rn printf("(2)依次采用尾插法<em>插入</em>a,b,c,d,e元素\n");rn ListInsert(h,1,'a');rn ListInsert(h,2,'b');rn ListInsert(h,3,'c');rn ListInsert(h,4,'d');rn ListInsert(h,5,'e');rn printf("(3)输出<em>双链表</em>h:");rn DispList(h);rn printf("(4)<em>双链表</em>h长度=%d\n",(ListLength(h)));rn printf("(5)<em>双链表</em>h为%s\n",(ListEmpty(h)?"空":"非空"));rn GetElem(h,3,e);rn printf("(6)<em>双链表</em>h的第3个元素=%c\n",*e);rn printf("(7)元素a的位置=%d\n",LocateElem(h,'a'));rn printf("(8)在第4个元素位置上<em>插入</em>f元素\n");rn ListInsert(h,4,'f');rn printf("(9)输出<em>双链表</em>h:");rn DispList(h);rn printf("(10)删除h的第3的元素\n");rn ListDelete(h,3,*e);rn printf("(11)输出<em>双链表</em>h:");rn DispList(h);rn printf("(12)释放<em>双链表</em>h\n");rn DestroyList(h);rnrnrnrn哪位高手帮忙看下!!rn主函数中第六步的输出不行,rn没法找到返回的函数值,,rnrn是哪错啦?????rnrnint GetElem(DLinkList *L,int i,ElemType *e)rnrn int j=0;rn DLinkList *p=L;rn while(jnext;rn rn if(p==NULL)rn return 0;rn elsern rn *e=p->data;rn return 1;rn rnrnrn和rn GetElem(h,3,e);rn printf("(6)<em>双链表</em>h的第3个元素=%c\n",*e);rnrn应该就是这两步的<em>问题</em>,,,rnrn帮忙看下rnrn谢咯!!!!
有关双向链表的结点插入(在p结点插入s结点
s->data=e;rns->prior=p->prior;p->prior->next=s;rns->next=p;p->prior=s;rn前几天学习单向链表时一直把p->next当做一个指针,现在学双向了,不知道代码中p到底指前指针还是后指针,还是p->next原本就不指向指针,而是指向后面一个整体··
求助,单链表插入结点问题
#include rn#include rn#include rnclass list;rnclass linknodernrnfriend class list;rnprivate:rn int data;rn linknode * link;rn;rnclass listrnrnprivate:rn linknode * first;rnpublic:rn int insert(int i,int& x);rn int find(int& x);rn void output();rn int remove(int& x);rn;rnint list::insert(int i,int x)rnrn if (first==NULL||i==0)rn rn linknode * newnode=new linknode(x);rn if (newnode==NULL)cerrlink=newnode;rn rn return 1;rn rn;rnvoid list::output()rnrn linknode * now=first;rn while(first!=NULL)rn rn coutx;rn lst.insert(i,x);rn rn lst.output();rnrn//CPP文件rnrn运行报错rnstdafx.h(40) : error C2664: '__thiscall linknode::linknode(const class linknode &)' : cannot convert parameter 1 from 'int' to 'const class linknode &'
avl树插入结点问题
在AVL树中<em>插入</em><em>结点</em>,如果导致失衡,则需进行调整,一般把其归纳为四种情况(LL,RR,LR,RL)rn我的<em>问题</em>是:在一棵空树中先后<em>插入</em>int型<em>结点</em>3,1,2会失衡,属于哪种情况?rn难道说上述四种并没有包括所有会失衡的情况
MSXML 插入结点问题
我建了个这样的XML文档。rnrnrnrn 较时日志rn rn 2004-7-9rn rn rn rnrnrn我想在这个文档中再增加一个<em>结点</em>,代码是这样写的:rnrn//rn//增加一条记录rn//rnIXMLDOMElement *pXMLAdd = NULL;rnbstr = SysAllocString(L"Record");rnpxmldoc->createElement(bstr,&pXMLAdd);rnSysFreeString(bstr);rnrn//设置属性rnbstr = SysAllocString(L"ID");rnVariantInit(&var);rnVariantClear(&var);rnV_BSTR(&var) = SysAllocString(CComBSTR(str_no));rnV_VT(&var) = VT_BSTR;rnrnpXMLAdd->setAttribute(bstr,var);rnrn//设置为根的子<em>结点</em>rntagVARIANT t_;rnZeroMemory(&t_,sizeof(tagVARIANT));rnpXMLNodeRoot->insertBefore(pXMLAdd,t_,&pNode);rnif (pNode)rnrn pNode->Release();rnrnpNode = NULL;rnrnrn但是,为什么每次只是复盖我以前的那个Record呢?rnrn一般<em>插入</em>一个新<em>结点</em>是如何做的呢?
一个链表的结点插入问题
严氏中有这样的一个<em>算法</em>:rnrnStatus ListInsert_L(LinkList &L,int i,ElemType e)rn//带头<em>结点</em>的单链表线性表L的第i个元素之前<em>插入</em>元素ernif(!LocatePos(L,i-1,h)) return ERROR; //i值不合法rnif(!MakeNode(s,e)) return ERROR;rnInsFirst(h,s);rnreturn OKrnrnrn关于这一行:rnif(!LocatePos(L,i-1,h)) return ERROR; //i值不合法rn为什么要判断i-1位置呢?当我i输入1时会不会报错呢?
MFC TreeCtrl插入结点问题
for(int i=0;i+i,NULL,NULL);//word是<em>插入</em>节点的编号 rnrn可是我的树上面永远都只有<em>插入</em>的最后那个<em>结点</em>, 请问每一个<em>结点</em>都要插上该怎么做?
一个关于插入结点问题
在一个带头<em>结点</em>的单链表HL中,若要向表头<em>插入</em>一个由指针p指向的<em>结点</em>,则执行 rnrn选项() rn(A) HL=p; p-→next=HL; rn(B)p-→next=HL;HL=p; rn(C)p-→next=HL;p=HL; rn(D)p-→next=HL-→next;HL-→next=p; rnrn答案:(D) rnrn以下是我所画的[color=#FF0000]示意图[/color],请点击下面超链接:rnhttp://p13.freep.cn/p.aspx?u=v20_p13_p_0911242327226853_0.jpgrn————————————————————————————————rn我的疑问是:在[color=#00FF00]最后一个我所画的<em>结点</em>[/color](绿色),是否是‘[color=#99CC00]单链表中头<em>结点</em>HL的下一个<em>结点</em>’[/color]啊,我不能确定这个<em>结点</em>所放置的位置是否正确,rnrn 诚请热心人帮忙指教,谢谢 rn
倒序打印双链表算法
1.使用递归的方法public void reverseByRecur(Node head){ if(head==null) return; reverseByRecur(head.next); System.out.print(head.data); }2.根据栈的后进先出原则,可以使用栈,需要使用N个附加空间public void reverseByStack
双链表各种基本运算的算法
在<em>双链表</em>中,由于每个<em>结点</em>既包括一个指向后继<em>结点</em>的指针有包括一个指向前驱<em>结点</em>的指针,当访问一个<em>结点</em>后既可以依次向后访问又可以依次向前访问。与单链表相比,<em>双链表</em>中访问一个<em>结点</em>的前后<em>结点</em>更便捷。 #include&lt;stdio.h&gt; #include&lt;malloc.h&gt; typedef int ElemType; typedef struct DNode { ElemTyp...
4.9.10.双链表算法插入节点
本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。
4.9.12.双链表算法之删除节点
本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。
双链表算法操作
1、<em>双链表</em> <em>双链表</em>就是在单链表<em>结点</em>上增添了一个指针域,指向当前<em>结点</em>的前驱。 2、<em>双链表</em><em>结点</em>定义 typedef struct DoubleLinkedLists { int data; struct DoubleLinkedLists *prior; struct DoubleLinkedLists *next; }DoubleLinkedLists;3、<em>插入</em><em>结点</em>的<em>算法</em> 假设在<em>双链表</em>
循环双链表插入一直有问题
[code=C/C++]#include rn#include rn#include rnrn#define N 100rnrntypedef struct studentrnrn int studentID;rn char name[N];rn int age;rn int sex;rnSTUDENT;rnrntypedef struct scorernrn int chinese;rn int math;rn int english;rn int average;rn int total;rnSCORE;rnrntypedef struct nodernrn STUDENT stu;rn SCORE sc;rn struct node *next;rn struct node *pione;rnNODE;rnrnextern NODE * mycreate();rnextern void myinsert(NODE *,STUDENT *,SCORE *);rnextern void mycopy(NODE *,STUDENT *,SCORE *);rnextern void myprint(NODE *);rnrnvoid mycopy(NODE *node,STUDENT *student,SCORE *score)rnrn node->stu.studentID = student->studentID;rn strcpy(node->stu.name,student->name);rn node->stu.age = student->age;rn //printf("age = %d\n",node->stu.age);rn node->stu.sex = student->sex;rn node->sc.chinese = score->chinese;rn node->sc.math = score->math;rn node->sc.english = score->english;rn node->sc.average = score->average;rn node->sc.total = score->total;rn //return node;rnrnrnNODE * mycreate()rnrn NODE *head = (NODE *)malloc(sizeof(NODE *));rn head->stu.studentID = 0;rn head->next = head;rn head->pione = head;rn return head;rnrnrnvoid myinsert(NODE *head,STUDENT *student,SCORE *score)rnrn //NODE *p = (NODE *)malloc(sizeof(NODE *));rn //mycopy(p,student,score);rn if(head->stu.studentID == 0)rn rn mycopy(head,student,score);rn myprint(head);rn rn elsern rn NODE *last = head;rn //NODE *p = (NODE *)malloc(sizeof(NODE *));rn //mycopy(p,student,score);rn printf("bwhile\n");rn while(last->next != head)rn rn last = last->next;rn rn printf("awhile\n");rn NODE *p = (NODE *)malloc(sizeof(NODE *));rn //memset(p,0,sizeof(p));rn //last = (NODE *)malloc(sizeof(NODE *));rn mycopy(p,student,score);rn //printf("age--- = %d\n",p->stu.age);rn head->pione = p;rn //p->next = head;rn printf("age1 = %d\n",p->stu.age);rn last->next = p;rn //p->pione = last->next;rn printf("age2 = %d\n",p->stu.age);rn //p->next = head;rn //last->next = p;rn printf("age3 = %d\n",p->stu.age);rn p->pione = last;rn p->next = head;rn //last->next = p;rn printf("age4 = %d\n",p->stu.age);rn //last = p;rn //mycopy(p,student,score);rn //printf("duanduanduab\n");rn //free(p);rn //p = NULL;rn rn //return head;rnrnrnvoid myprint(NODE *head)rnrn //NODE *q = head;rn NODE *q = (NODE *)malloc(sizeof(q));rn q = head;rn int i = 1;rn #if 1rn while(q->next != head)rn rn printf("No.%d:ID:%d\tName:%s\tAge:%d\tSex:%d\n",i,q->stu.studentID,q->stu.name,q->stu.age,q->stu.sex);rn printf(" Chinese:%d\tMath:%d\tEnglish:%d\tAverage:%d\tTotal:%d\n",q->sc.chinese,q->sc.math,q->sc.english,q->sc.average,q->sc.total);rn i++;rn q = q->next;rn printf("\n");rn rn printf("No.%d:ID:%d\tName:%s\tAge:%d\tSex:%d\n",i,q->stu.studentID,q->stu.name,q->stu.age,q->stu.sex);rn printf(" Chinese:%d\tMath:%d\tEnglish:%d\tAverage:%d\tTotal:%d\n",q->sc.chinese,q->sc.math,q->sc.english,q->sc.average,q->sc.total);rn #endifrnrnrnint main()rnrn //dmes("asdasd");rn NODE *head = mycreate();rn STUDENT stu1;rn STUDENT stu2;rn STUDENT stu3;rn STUDENT stu4;rn SCORE sc1,sc2,sc3,sc4;rn stu1.studentID = 12001;rn strcpy(stu1.name,"王强");rn stu1.age = 19;rn stu1.sex = 1;rn sc1.chinese = 90;rn sc1.math = 91;rn sc1.english = 92;rn sc1.average = 91;rn sc1.total = 273;rn stu2.studentID = 12002;rn strcpy(stu2.name,"张芳");rn stu2.age = 19;rn stu2.sex = 0;rn sc2.chinese = 80;rn sc2.math = 81;rn sc2.english = 82;rn sc2.average = 81;rn sc2.total = 243;rn stu3.studentID = 12003;rn strcpy(stu3.name,"李明");rn stu3.age = 19;rn stu3.sex = 1;rn sc3.chinese = 70;rn sc3.math = 71;rn sc3.english = 72;rn sc3.average = 71;rn sc3.total = 213;rnrn stu4.studentID = 12004;rn strcpy(stu4.name,"王小雨");rn stu4.age = 20;rn stu4.sex = 0;rn sc4.chinese = 60;rn sc4.math = 61;rn sc4.english = 62;rn sc4.average = 61;rn sc4.total = 183;rnrn myinsert(head,&stu1,&sc1);rn myprint(head);rn printf("1111111\n");rn myinsert(head,&stu2,&sc2);rn myprint(head);rn printf("2222222\n");rn myinsert(head,&stu3,&sc3);rn myprint(head);rn printf("3333333\n");rn myinsert(head,&stu4,&sc4);rn myprint(head);rn printf("444444444\n");rn myprint(head);rn[/code]rn<em>插入</em>第3个的时候就出<em>问题</em>,纠结很久了,求高手帮帮忙~~~~~~~~~~~~~~~~·
数据结构系列之链表——双链表插入
(p0开空间,赋值、循环判断移动指针、numdata,分头分中,否则为尾部<em>插入</em>) dnode* insert(dnode *head,int num){     dnode *p1,*p0;     p1=head;     p0=(dnode*)malloc(sizeof(dnode));     p0->data=num;     while(num>p1->data&& p1->
双链表的建立以及插入,删除操作
//<em>双链表</em> #include&amp;lt;iostream&amp;gt; #include&amp;lt;string&amp;gt; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; using namespace std; typedef struct student { int data; struct student *next; struct stude...
编程实现双链表的建立、插入、删除
#include #include #include using namespace std; typedef struct node { int data; struct node *next; struct node *pre; }node; node *creat(){//<em>双链表</em>创建 node *head,*p,*s; int x,cycl
双链表的两个结点交换。求教。谢谢
q为p的前驱<em>结点</em>,现要交换两个<em>结点</em>的位置。代码如下:rn[code=c]rn/*连接<em>结点</em>p与<em>结点</em>q的前一个<em>结点</em> */ rnp->prior = q->prior;rnp->prior->next = p; //这里改成p->prior->next = p->prior 这个两个有区别吗?rn/*连接<em>结点</em>q与<em>结点</em>p的后一个<em>结点</em> */ rnq->next = p->next;rn if(q->next != NULL) //如果*P不为最后一个<em>结点</em>rn // q->next->prior = q;rn p->next->prior = q;rn/*连接<em>结点</em>p和<em>结点</em>q */rn p->prior = q; rn q->next = p;//这两句是不是写成这样 p->next=q;q->prior=p 还是我理解错了rn[/code]
双链表结点及部分操作(C++描述)
<em>双链表</em>结构定义:#ifndef DOUBLY_LINKED #define DOUBLY_LINKED//支持freelist的<em>双链表</em><em>结点</em>定义 template class Link{ private: static Link* freelist; //指向freelist头public: E element; Link* next;
判断带头结点的循环双链表是否对称
#include &quot;stdafx.h&quot; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;malloc.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; typedef int type; typedef struct lnode //定义链表<em>结点</em>的数据结构 { int data; struct lnode *next; }Lnode; ty...
带头结点的循环双链表是否对称
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; typedef struct DNode{ int data ; struct DNode *next, *prior ; }DNode , *DinkList; DinkList Createlist( DinkList L){ int num ; DNod...
师--链表的结点插入
师--链表的<em>结点</em><em>插入</em> Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面<em>插入</em>一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。 Input 多组输入。每组数据首先输入一个整
平衡二叉树结点插入和调整
首先要说明为什么要引进平衡二叉树 【例】搜索树<em>结点</em>按照不同的<em>插入</em>次序,将导致不同的深度和平均查找长度(ASL),例如下图 第二种比较“均匀”,最平衡的方式是左右<em>结点</em>树相同,但是这个条件比较苛刻,可是适当放宽这个条件,因此引进了平衡二叉树 “平衡因子”(Balance Factor,简称BF):BF(T)=hL-hR,其中hL和hR分别为T的左、右子树的高度 平衡二叉树(Balanc
链表——结点插入
下面的代码包括了头插,尾插两种<em>插入</em>方式。#include #include struct node { int num; struct node * next; };typedef struct node Node; typedef Node * Link;void create_link(Link * head)//创建一个空的链表 {
单链表结点插入flash演示
单链表<em>结点</em>的flash演示。适合初学者更好理解链表的原理。
TASK(结点插入
01#include &amp;lt;iostream&amp;gt;02using namespace std;03int s;04struct student05{06    int Order;07    char  Name[10];08    char Sex[2];09    int Grade;10} temp;11struct node12{13    struct student data;14...
双向链表插入结点的理解。
这几天集中时间看了下单<em>双链表</em>的内容,发现双向链表的<em>插入</em>很难理解,今天恍然大悟,最重要的部分就是如何使得你的代码跟你的作图能够吻合起来,这样就不用死记硬背。 下图为双向链表的<em>插入</em>,知乎里偶然看见的一张图,这几步操作也非常明了,只是我图中画的不是很准,我都用红色箭头做了修改,这样就一目了然了。 总体来讲,要将s<em>结点</em>嵌入到双向链表中,需要切断并重新连接两根线,还要再额外连两根线,看图四,非常
二叉搜索树的插入及查找结点
#include using namespace std; #define nil -99999999; struct node {     int key;     node* left;     node* right;     node()     {         key=nil;         left=NULL;         right=NULL;  
链表之链表的结点插入
师–链表的<em>结点</em><em>插入</em> Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面<em>插入</em>一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。 Input 多组输入。每组数据首先输入一个整数n(n∈[1...
二叉树的结点插入
#include rnusing namespace std;rn rntypedef struct Nodern char data;rn struct Node *lchild, *rchild;rnBinTNode;rnrntypedef BinTNode *BinTree;rnrnvoid IInsert(BinTree *T,char x)rnrn bool found= false;rn BinTNode *p=*T,*q;rnrn while((p) && (!found))rn rn q=p;rn if(x==(p->data)) found=true;rn else if(xdata)) p=p->lchild;rn else p=p->rchild;rnrn rnrn if(!found)rn rn p=new BinTNode;rn p->lchild=NULL;rn p->rchild=NULL;rn p->data=x;rn if(*T)rn rn if(xdata)) q->lchild=p;rn else q->rchild =p;rn rn else *T=p;rn rnrnrnvoid Inorder(BinTree T)//中序遍历递归<em>算法</em>rnrn if(T)rn rn Inorder(T->lchild);rn coutch;rn IInsert(&Head,ch);rn rn rnrn Inorder(Head);rn InorderT(Head);rn return 0;rnrnrn可以编译通过,运行出错rnrn rn
链表插入结点
//在某个位置<em>插入</em>一个<em>结点</em> #include&amp;lt;iostream&amp;gt; using namespace std; struct NODE { int data; NODE *next; }; NODE *Insert(NODE *L,int n1,int pos) { NODE *n; n-&amp;gt;data=n1; if(L==NULL) { L=n; } int k=...
xml 不定层级结点插入结点
为了用树状结构保存发言信息使用了xml数据类型。rn发言实例如下:rn ——李天一的案子大家怎么看?rn ——他不是个好孩子。rn ——为什么说他不是个好孩子?rn ——因为他干了坏事。rn ——他是个好孩子。rn ——为什么说他是个好孩子?rn ——他爹会唱歌。rn +++瓜瓜这学生怎么样?rnrnrn目前知道的给指定<em>结点</em><em>插入</em><em>结点</em>必须通过[color=#FF0000]指定路径[/color]再<em>插入</em>。rn但是发言是无限层级的,这种无法指定路径。rn是否有方法全文检索<em>插入</em>?rnrnrn
算法 完全二叉树的结点个数问题
已知一个完全二叉树的根<em>结点</em>root,设计一个<em>算法</em>,求出此二叉树的<em>结点</em>个数n,要求<em>算法</em>的复杂度优于O(N)
双链表问题
有四个接点 A B C D 用p指向A P->next->pre 指向哪个啊?rn 书上说指向c 我有点不解!
C语言数据结构双链表算法
数据结构习题与解析(B级第3版) 李春葆 喻丹丹 编著 2.4
数据结构与算法(Java)-006-双链表
每一个节点持有一个指向它在表中的前驱节点的链,如图所示,我们称之 为<em>双链表</em>(doubly linked list)。 测试代码 节点 package top.itcourse.list; /** * 双向链表节点 */ public class Node&amp;lt;T&amp;gt; { // 存储数据 private T data; // 下一节点 ...
双链表_链表_线性结构_数据结构与算法
关于数据结构中双向链表的<em>算法</em>实现,使用C语言代码编程。
数据结构与算法学习(二)——双链表
<em>双链表</em>的<em>结点</em>包括3个域,一个是存放数据信息的info域,另外两个是指针域, <em>双链表</em>的结构定义如下 typedef struct dlink_node{ datatype info; struct dlink_node *llink,*rlink; }dnode; <em>双链表</em>中第一个<em>结点</em>没有前驱,它的llink域为NULL;最后一个<em>结点</em>没有后继它的rlink域为NULL;<em>结点</em>中的...
数据结构与算法/循环链表与双链表实验
前阵子因为复习期末考试博客好久不更,这阵子把我对数据结构这门课的实验代码贴上来,有对代码感兴趣或者不清楚的地方可以评论,我会一一解答。1、假设在长度大于 1 的单循环链表中,既无头<em>结点</em>也无头指针。s 为指向某个<em>结点</em>的指针,试编写<em>算法</em>删除<em>结点</em>*s 的直接前驱<em>结点</em>。2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计<em>算法</em>构造三个以循环链表示的线性表,使每一个表中只含
实现双链表各种基本运算的算法
/** * 实验题目: * 实现<em>双链表</em>各种基本运算的<em>算法</em> * 实验内容: * 设计一个程序,实现<em>双链表</em>的各种基本运算,并在此基础上设计一个 * 主程序完成如下功能: * 1、初始化<em>双链表</em>h。 * 2、依次采用尾插法<em>插入</em>a、b、c、d、e元素。 * 3、输出<em>双链表</em>h。 * 4、输出<em>双链表</em>h长度。 * 5、判断<em>双链表</em>h是否为空...
4.9.11.双链表算法之遍历节点
本课程主要目标是让大家彻底全面的掌握链表这一数据结构。因为链表在内核驱动开发中属于很重要的基础技术,因此用十几节课来彻底深入讲解和实践。
数据结构,链表中结点插入问题
[size=24px]对带头<em>结点</em>的单链表L,在指针p所指的<em>结点</em>上<em>插入</em>数据元素为e的新<em>结点</em>(设由指针s指示):前插O(n),后插O(1),分别写出<em>插入</em><em>算法</em>,[color=#FF0000]思考:前插O(n),如何改进至O(1)?[/color][/size]重点是思考题,请各位大神指点~~
单链表初始化与插入结点问题!非常迷惑!!!!
#include rn#include rnrntypedef struct studentrnrn int num;rn struct student *next; rnstu, *linknode;rnrnrnvoid InitNode(linknode *head)rnrn if((*head=(linknode)malloc(sizeof(stu)))==NULL)rn rn printf("¿Õ¼ä²»×ã"); rn rn (*head)->next=NULL; rnrnrnrn/* ??? p ??? key */rnvoid InsertAfter(stu* p, int key)rnrn stu *s;rn s = (stu*) malloc(sizeof(stu));rn s -> num = key;rn s -> next = NULL;rn p -> next = s;rnrnrnvoid main()rn rn stu* node;rn InitNode(&node);rn InsertAfter(node,33);rn getch();rn rnrnrn首先采用2级指针这种方式初始化链表。当执行完InitNode()函数后可以直接改变main函数中的node指针。rn<em>问题</em>在于InsertAfter()这个函数 这是在网上找的。我非常不明白为什么传的参数是stu* p 而不用stu **p;rnrn这里疑问在于另一个例子,rnint fun(char*s)rnrn rnrn int num = 0;rnrn for(int I = 0;i rnrn num += *s;s++;rnrn rnrn return num;rnrn rnrn 这个例子中的函数fun统计一个字符串中各个字符的ASCII码值之和。前面说了,数组的名字也是一个指针。在函数调用中,当把str作为实参传递给形参s后,实际是把str的值传递给了s,s所指向的地址就和str所指向的地址一致,但是str和s各自占用各自的存储空间。在函数体内对s进行自加1运算,并不意味着同时对str进行了自加1运算。rn..............................................................................rnrn也就是InsertAfter(stu* p,..)中的p与main()函数中的node 实际是两个存储空间 那就是说p->next != node->nextrn也就是 实际<em>插入</em>的<em>结点</em>没有为node->next赋值 ,但是结果却是赋值的。rn但是如果这样可以操作的话,为什么初始化的时候就不可以直接传stu * node,这样不是 (*head)->next=NULL; 可以改成head->next=NULL了么?但事实还是不行。。郁闷了rnrnrn小弟这里真的非常迷惑。哪位了解 请不吝赐教。。最好能说的清楚一点。。因为网上说的五花八门 。我现在是真的越看越糊涂了。。rn谢谢啦。。。各位哥哥们。分数不多。望大家不要计较!rnrnrn
初学者提问:关于链表插入结点问题
在排好序的链表中<em>插入</em><em>结点</em>,总是处理不好尾<em>结点</em>,程序如下:while(q->next->data>p->data)q=q->next;其中p是要<em>插入</em>的点,q用来搜索<em>插入</em>的前<em>结点</em>.但这样当q->next==NULL时要怎么处理呢?while(q->next->data>p->data&&q->next==NULL)q=q->next;也不行啊!rn望高手指教一二!
请问在TreeView中插入结点问题?
在TreeView中在两个<em>结点</em>中<em>插入</em>一个<em>结点</em>,比如已有<em>结点</em>a,b,想在它们中间<em>插入</em>一个<em>结点</em>,变成a,b,c的结构,应该怎么做啊,快,在线等,谢谢了!
单链表插入算法问题
[code=C/C++]Status ListInsert_L(LinkList &L,int i,ElemType e)rn// 带头<em>结点</em>的单链表L中第i个位置前<em>插入</em>元素ernp=L,j=0;rnrnwhile(p&&jnext;++j;rnrnif(!p||j>i-1) return ERROR;rnrns=(LinkList)malloc(sizeof(LNode));rnrns->data=e;s->next=p->next;rnrnp->next=s;rnrnreturn OK;rnrn//ListInsert_Lrn[/code]rn为带头<em>结点</em>的空链表<em>插入</em>数据时 i的取值为多少?rn有人说取i=0rn但是i=0时 程序执行跳过while循环rn直接进入if条件判断 (j=0)>(i-1=-1) 那么应该返回ERRORrn相当于不能为空链表<em>插入</em><em>结点</em> ?rn为什么啊 各位大虾 来帮我回答下这个<em>问题</em>啊 。。。。。。。。。。。。。。
一个插入算法问题
以下<em>插入</em>排序不知道错在哪?谢谢!rnint a[] = 5,1,4,2,7,6;rn int c = sizeof(a) / sizeof(int);rn int i,j,k;rn /************************************************************************/rn int temp;rn for (i = 1;i < c;i++)rn rn j = i - 1;rn temp = a[i];rnrn //for (k = 1;k < a[j])rn a[j + 1] = a[j];//a[j]控制比较的元素(每次都从最后开始)rn j--;rn rn a[j + 1] = temp;
数据结构 算法 插入问题
有没有大神知道p前面<em>插入</em>s的4条语句怎么写?谢谢……………………![图片说明](https://img-ask.csdn.net/upload/201703/22/1490165098_370385.png)
插入算法问题
#include rnvoid main ()rn int n = getchar()-'0';/*先输入数组大小,实验<em>算法</em>所以就不用动态了*/rn int a[n],i;rn char c;rn for(i=0;i key && i > 0)rn b[i+1]=b[i];rn i--;rn b[i+1]=key;rn for(i = 0;i); rn rn insertionsort(a);rn这是我根据书上的伪代码,输入的数字原样输出,是不是因为参数传递有<em>问题</em>呀,各位帮帮忙rn
一个关于单链表插入结点问题
设单链表中<em>结点</em>的结构为rntypedef struct node//链表<em>结点</em>定义rnelentype data;//数据rnstruct node *next;//<em>结点</em>后继指针rnlistnode;rnrnrn已知指针p所指<em>结点</em>不是尾<em>结点</em>,若在*p之后<em>插入</em><em>结点</em>rn*s,则应执行下列哪一个操作( )rnrn它的选项是()rn(A)snext=p; pnext=s;rn(B)snext=pnext;pnext=s;rn(C)snext=pnext;p=s;rn(D)pnext=s;snext=p;rnrn书中的答案是这样的:rn[color=#FF0000]选择(B) [/color] ---P13.2rnrn____________________________rn我的<em>问题</em>是:rn我认为应该选择[color=#FF0000](D)[/color]啊,即是rn rn ←————rn↓ ↑rn ps—→rnrn rn是我的理解错误,还是书中的答案错误了呢,恳请热心人帮忙指教,谢谢
关于树插入结点过程中的怪问题
我在实现Splay树(不知道的尽可以当一般树理解)节点<em>插入</em>时遇到了一个怪<em>问题</em>,请高人指教!rn程序有点长,但只有Insert函数是<em>问题</em>所在,其他函数可以不管rnSplay.h:rn#ifndef SPLAY_Hrn#define SPLAY_Hrn#includernusing namespace std;rntypedef int SplayType;rnclass SplayTree;rnclass SplayNodernrnpublic:rn friend class SplayTree;rn SplayType data;rn SplayNode *left,*right;rn SplayNode():left(NULL),right(NULL) rn SplayNode(SplayType d,SplayNode *l=NULL,SplayNode *r=NULL): data(d),left(l),rn right(r) rn;rnrnSplayNode *sentinel=new SplayNode(-1);rnrnclass SplayTreernrnpublic:rn SplayType RefValue;rn SplayNode *root;rn void LinkLeft(SplayNode* &current,SplayNode* &lastsmall);rn void LinkRight(SplayNode* &current,SplayNode* &firstlarge);rn void RotateLeft(SplayNode* &current);rn void RotateRight(SplayNode* &current);rn int Insert (SplayNode* &root,SplayType target);rn int Height( SplayNode *t) const;rn void Print(SplayNode *ptr,int h) const;rnpublic:rn SplayTree ( ) : root (NULL) rn SplayTree (SplayType Ref ) : RefValue (Ref), root (NULL) rn int Delete (SplayType target);rn friend istream& operator >> ( istream& in,const SplayTree& Tree );rn friend ostream& operator << ( ostream& out, const SplayTree& Tree );rn int Height ( ) const;rn void Print() const;rn void Traverse ( SplayNode *ptr, ostream & out ) const;rn int Insert ( SplayType target) return Insert ( root, target ); rn void SetNode(SplayNode* &root);rnrn;rn#endifrnrnSplay.cpp:rn#includernusing namespace std;rn#include"Splay.h"rnrnvoid SplayTree::LinkLeft(SplayNode* &current,SplayNode* &lastsmall)rnrn lastsmall->right=current;rn lastsmall=current;rn current=current->right;rnrnrnvoid SplayTree::LinkRight(SplayNode* &current,SplayNode* &firstlarge)rnrn firstlarge->left=current;rn firstlarge=current;rn current=current->left;rnrnrnvoid SplayTree::RotateLeft(SplayNode* &current)rnrn SplayNode *rightchild=current->right;rn current->right=rightchild->left;rn rightchild->left=current;rn current=rightchild;rnrnrnvoid SplayTree::RotateRight(SplayNode* &current)rnrn SplayNode *leftchild=current->left;rn current->left=leftchild->right;rn leftchild->right=current;rn current=leftchild;rnrnvoid SplayTree::SetNode(SplayNode* &tree)rnrn if(tree==sentinel)rn return;rn else if(tree==NULL)rn rn tree=sentinel;rn return;rn rn elsern rn SetNode(tree->left);rn SetNode(tree->right);rn rnrn rnrnint SplayTree::Insert(SplayNode* &tree,SplayType target)rnrn int success=0;rn SplayNode *current,*child,*lastsmall,*firstlarge;rnrn if(tree==NULL)rn rn tree=new SplayNode(target,sentinel,sentinel);rn success=tree!=NULL?1:0;rn rn elsern rn SetNode(tree);rn sentinel->data=target;rn lastsmall=firstlarge=sentinel;rn for(current=tree;current->data!=target;)rn rn if(current->dataright;rn if(target==child->data)rn rn LinkLeft(current,lastsmall);rn rn else if(target>child->data)rn rn RotateLeft(current);rn LinkLeft(current,lastsmall);rn rn elsern rn LinkLeft(current,lastsmall);rn LinkRight(current,firstlarge);rn rn rn elsern rn child=current->left;rn if(target==child->data)rn rn LinkRight(current,firstlarge);rn rn else if(targetdata)rn rn RotateRight(current);rn LinkRight(current,firstlarge);rn rn elsern rn LinkRight(current,firstlarge);rn LinkLeft(current,lastsmall);rn rn rn rn if(current==sentinel)rn rn coutleft=current->right;rn current->right=sentinel->left;rn current->left=sentinel->right;rn tree=current;rn sentinel->data=-1;sentinel->left=sentinel->right=NULL;rn rn return success;rnrnint SplayTree::Height() constrnrn return Height(this->root);rnrnint SplayTree::Height(SplayNode *ptr) constrnrn if(ptr==NULL)rn return -1;rn else return Height(ptr->left)>=Height(ptr->right)?rn 1+Height(ptr->left):1+Height(ptr->right);rnrnrnvoid SplayTree::Print() constrnrn cout << "The tree now is\n";rn this->Print(this->root,0);rnrnvoid SplayTree::Print(SplayNode *ptr,int h) constrnrn if(ptr!=NULL)rn rn Print(ptr->left,h+1);rn for(int i=0;i<<< ptr->data << endl;rn Print(ptr->right,h+1);rn rnrnrnistream & operator >> ( istream & in, SplayTree & tree ) rnrnrn SplayType item; rn cout << "构造Splay树";rn cout << "输入数据(以" << tree.RefValue << "结束";rn in >> item; //ÊäÈërn while ( item != tree.RefValue ) rn rn tree.Insert (item);rn tree.Print();rn cout << "输入数据(以" << tree.RefValue << "结束";rn in >> item; rn rn return in;rnrnvoid SplayTree::Traverse ( SplayNode *ptr, ostream & out ) const rnrnrn if ( ptr != NULL ) rn rn Traverse ( ptr->left, out ); rn out << ptr->data << ' '; rn Traverse ( ptr->right, out ); rn rnrnostream & operator << ( ostream & out, SplayTree & tree ) rnrn out << "Splay树的中序遍历";rn tree.Traverse ( tree.root, out );rn out << endl;rn return out; rnrnrnvoid main()rnrn// SplayType x;rn SplayTree tree(-1);rnrn for(int i=1;i>tree;rn// cout<<
插入算法问题
表中有一个字段格式如下:rnfieldrn001rn002rn005rn006rn007rn010rn现在想往其中<em>插入</em>数据占003的位置,之后在<em>插入</em>数据占004的位置,在之后为008,009,不知如何写,另处如果有100条数据前98条顺序号都是接着的,<em>插入</em>第099行,如果顺次计算,<em>算法</em>会不会很笨。
菜兔子,链表中插入结点问题
#include rnusing namespace std;rnstruct Testrnrn int a;rn;rnrnstruct Nodernrn Test tt;rn Node *next;rn;rn//定义方法rnNode *Creat(int n);rnvoid insertIn(Node *head,Node *pwd,int n);rnNode *Creat(int n) rnrn Node *pwd,*pCur; //创建<em>结点</em>地址,当前指针地址rn Node *head=NULL; //头指针rn rn rn for(int i=0;itt.a=i;rn rn elsern rn pwd = new Node;rn pCur->next=pwd;rn pCur=pwd;rn pCur->tt.a=i;rn if(i>=n-2)rn rn pCur->next=NULL;rn pCur->tt.a=i;rn rn rn rn return head;rnrnvoid insertIn(Node **head,Node *pwd,int n)rnrn Node *pCur,*Pnext; //当前指针和下一个<em>结点</em>的地址指针rn pCur = *head; rn int a=0;rn while(anext=pCur;rn a++;rn rn rn Pnext = pCur->next; //获得下一个<em>结点</em>rn pwd->next=Pnext; // next指针指向这个<em>结点</em> rn pCur->next=pwd; //<em>插入</em><em>结点</em>rnrnrnint main()rnrn Node *head = Creat(10);rn rn Node *pwd1 = new Node;rn pwd1->tt.a=100;rn insertIn(&head,pwd1,4);rn outList(head);rn return 0;rnrn貌似没有逻辑错误,但rn为什么回进入一个另人不爽的死循环呢?语法有<em>问题</em>不?
问个关于链表插入结点问题
关于链表<em>插入</em>我们一般分三种情况(假设插在ptr<em>结点</em>之后):rn1。<em>插入</em>到头<em>结点</em>之前。rn2。插到最后一个<em>结点</em>之后。rn3。中间<em>结点</em>。rn一般我们是用newNode->next = ptr->next;(插在ptr之后,ptr用findNod函数来确定)rn ptr->next = newNode;来解决。rn我想问一下1。对于插到头<em>结点</em>前面的判断条件是什么比如if(___)括号在是什么条件?比如插到最后条件则是if(ptr->next = NUUL)rn 2。对于第二种情况和第三种情况似乎可以作为同一种情况处理?为什么不能?rn 3。对于循环链表为什么却把第二种和第三种情况分在一起,而单链表为什么不能?而且循环链表<em>插入</em>到头<em>结点</em>的判断条件又是什么呢?似乎和单链表不同,if(__)。
双链表
对于单链表或循环链表,从表头<em>结点</em>开始扫描,可以遍历到链表中的每个<em>结点</em>,而循环链表可以从任何<em>结点</em>出发对各个<em>结点</em>进行遍历。但它们都有一个共同的缺陷,就是无法快速地访问<em>结点</em>的前驱。例如,为了删除<em>结点</em>p,必须首先找到p的前驱<em>结点</em>,这需要从表头开始查找链表,直到某个<em>结点</em>q的后继等于p,q即p的前驱,显然,这是极不方便的。 为了支持双向快速访问<em>结点</em>,引入了双向链表的概念。在双向链表中,每个<em>结点</em>含有两个指针域
000000000000000000下载
000000jsdfklj lksdjlf 相关下载链接:[url=//download.csdn.net/download/qqshenxiaoshen/2064565?utm_source=bbsseo]//download.csdn.net/download/qqshenxiaoshen/2064565?utm_source=bbsseo[/url]
网络安全论文关于云计算下载
这是一篇对于云计算的了解,对于网络的了解的论文。都是很简单的了解对于初学者会有用的 相关下载链接:[url=//download.csdn.net/download/mabowen1989/3105384?utm_source=bbsseo]//download.csdn.net/download/mabowen1989/3105384?utm_source=bbsseo[/url]
国外简洁型 flash+xml 多分类相册源文件下载
国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件国外简洁型 flash+xml 多分类相册源文件 相关下载链接:[url=//download.csdn.net/download/niu0312/3951815?utm_source=bbsseo]//download.csdn.net/download/niu0312/3951815?utm_source=bbsseo[/url]
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图
我们是很有底线的