一个简单的双向链表类--xixi

来源:互联网 发布:js让div显示隐藏 编辑:程序博客网 时间:2024/06/05 18:43
 

#include<stdlib.h>
#include<iostream.h>

typedef struct node
{
 int data;
 struct node *pre;
 struct node *next;
}*LinkList,Lnode;

class DList
{
 //定义一个结构体,做为链表的元素的结构类型。
 LinkList Head;
 public:
 //定义一个链表
 void CreateLinkList()
 {
  LinkList q,s;
  q=(LinkList)malloc(sizeof(Lnode));
  if(q == NULL)
  {
   //printf("In CreateLinkList p is null,wrong!/n");
   cout<<"In CreateLinkList p is null,wrong!"<<endl;
   return;
  }
  q->data=NULL;
  q->next=NULL;
  q->pre=NULL;
  Head = q;
  int x,flag=1;
  //printf("input a node's data,0 to end:\n");
  cout<<"input a node's data,0 to end:"<<endl;
  while(flag!=0)
  {
   //scanf("%d",&x);
   cin>>x;
   if(x!=0)
   {
    s=(LinkList)malloc(sizeof(Lnode));
    s->data=x;
    s->next=NULL;
    s->pre=q;
    q->next=s;
    q=s;
   }
   else
   {
    flag=0;
    //break;
   }
  }

 }
 //打印链表的元素
 void PrintLinkList()
 {
  LinkList q;
  q=Head->next;
  if(Head->next==NULL)
  {
   //printf("L is empty\n");
   cout<<"DList is null!!"<<endl;
  }
 
  else
  {
   while(q!=NULL)
   {
    //printf("%d\n",q->data);
    cout<<q->data<<endl;
    q=q->next;
   }
  }
 }
 //计算链表的长度。
 int LenthLinkList()
 {
  int count=0;
  LinkList q;
  q=Head->next;
  while(q!=NULL)
  {
   count++;
   if(q->next==NULL) break;
   q=q->next;
  }
  return count;
 }
 //删除一个元素
 void DeleteLinkList()
 {
  LinkList q;
  q = Head->next;
  if(q == NULL)
  {
   //printf("%s\n","DList is null!!");
   cout<<"DList is null!!"<<endl;
   return;
  }
  else
  {
   Head->next = q->next;
   delete q;
  }
 }
};

忘了c++里面new函数怎么用的了,所以只能用malloc了。和delete匹配使用有点别扭哈,下次看看再改,今天要下班啦。

原创粉丝点击