现在的位置: 首页 > 综合 > 正文

双链表的定义、初始化、插入、删除,C++代码实现的算法

2014年02月26日 ⁄ 综合 ⁄ 共 2022字 ⁄ 字号 评论关闭

#include <iostream>

using namespace std;

 

/*双向链表类型定义*/

typedef struct duNode

{

       char data;

       struct duNode *prior;

       struct duNode *next;

}duNode;

typedef duNode *duLinklist;//指针类型,故访问它的成员用“->”。

 

 

/*初始化双向链表*/

void initLinklist_Du(duLinklist &L)//此处叫做引用调用,即实参和形参共用一个地址。

{

       L=new duNode;

       L->next=L;

       L->prior=L;

}

 

 

/*取某个结点的位置*/

duNode *getElemP_D(duLinklist L,int i)

{

       duNode *p;

       int count;

 

       p=L->next;

       count=1;

       while(p!=L&&count<i-1)

       {

              p=p->next;

              count++;

       }

 

       if(p==L||count>i-1)

              return NULL;

       else

              return p->next;

}

 

 

 

/*求双向链表的长度*/

int lengthLinklist_Du(duLinklist &L)

{

       duNode *p;

       int count;

 

       p=L->next;

       count=0;

 

       while(p!=L)

       {

              p=p->next;

              count++;

       }

      

       return count;

}

 

 

/*插入*/

void insertList_Du(duLinklist &L,int i,char x)

{

       duNode *p;

       duNode *s;

       p=getElemP_D(L,i);

       if(p==NULL)

              cout<<"Poision Error!";

      

       s=new duNode;

       s->data=x;

       s->prior=p->prior;

       s->next=p;

       p->prior->next=s;

       p->prior=s;

}

 

 

/*删除*/

void deleteList_Du(duLinklist &L,int i)

{

       duNode *p;

       p=getElemP_D(L,i);

       if(p==NULL)

              cout<<"Poision Error!";

       p->next->prior=p->prior;

       p->prior->next=p->next;

 

       delete p;

 

}

 

 

/*创建一个双向链表*/

void creatLinklist_Du(duLinklist &L,int n)

{

       duNode *p;

       duNode *s;

       initLinklist_Du(L);

       p=L;

 

       int i;

       for(i=0;i<n;i++)

       {

              s=new duNode;//这里忘记给S分配空间了,所以出错了。

              cin>>s->data;

              s->next=L;

              s->prior=p;

              p->next=s;

              L->prior=s;

              p=s;

       }

}

 

 

/*输出双向链表中的元素*/

void outputLinklist_Du(duLinklist &L)

{

       duNode *p;

       p=L->next;

 

       int i;

       for(i=0;i<lengthLinklist_Du(L);i++)

       {

              cout<<p->data<<" ";

              p=p->next;

       }

       cout<<endl;

 

}

 

void main()

{

       duLinklist L;

       creatLinklist_Du(L,3);

 

       //outputLinklist_Du(L);

}

 

出错了,要先自己仔细看看,自己找一下毛病,因为没有人比自己更熟悉自己的代码了!实在看不出哪错了,再去向别人请教!嘿嘿,努力啊!

抱歉!评论已关闭.