C++程式

來源:互聯網
上載者:User

單鏈表的實現

#include<iostream.h>
struct Node
{   int data;
 Node *next;
};
class LinkList
{
  public:
   LinkList( ){}; 
   LinkList(int a[ ], int n);//建立有n個元素的單鏈表
   void PrintList( )  ;        //遍曆單鏈表,按序號依次輸出各元素
   int Get(int i) ;//查詢元素值x
   int Locate(int x);//查詢元素位置i
   void Insert(int i, int  x);//插入
   int  Delete(int i);//刪除
  int Length( );//長度

private:
  Node *first;  //單鏈表的頭指標
};

    LinkList::LinkList(int a[ ], int n)//建立有n個元素的單鏈表

     first=new Node;   //產生頭結點
 Node *r,*s;
     r=first;          //尾指標初始化
    for (int i=0; i<n; i++)
 {
     s=new Node; s->data=a[i];  //為每個數組元素建立一個結點
      r->next=s; r=s;    }  //插入到終端結點之後 
   r->next=NULL;    //單鏈表建立完畢,將終端結點的指標域置空
}
 void  LinkList::PrintList( )
{
 Node *p;
 p=first->next;
 while (p)
 {
   cout<<p->data<<endl;
   p=p->next;
 }
}
int LinkList::Get(int i)
{  
  Node *p; int j;
  p=first->next;  j=1;  //或p=first;  j=0;
  while (p && j<i)   
  {
    p=p->next;       //工作指標p後移
    j++;
  }
  if (!p) throw "位置";
  else return p->data;
}
int LinkList::Locate(int x)
{
 Node *p; int j;
 p=first->next; j=1;
 if(p&&p->next){
   while(p->data!=x)
   {
   p=p->next;
      j++;
   }
 return j;
 }
 else throw "位置";
 
}
void LinkList::Insert(int i, int x)

   Node  *p; int j;
   p=first ; j=0;    //工作指標p初始化
   while (p && j<i-1)
   {
     p=p->next;   //工作指標p後移
     j++;
   }
   if (!p) throw "位置";
    else {
   Node *s;
      s=new Node;
   s->data=x;  //向記憶體申請一個結點s,其資料域為x
      s->next=p->next;       //將結點s插入到結點p之後
      p->next=s;
 }
 cout<<x<<endl;
}
int  LinkList::Delete(int i)
{
  Node *p; int j;
  p=first ; j=0;  //工作指標p初始化
  while (p && j<i-1)  //尋找第i-1個結點
  {
    p=p->next;
    j++;
  }
  if (!p || !p->next) throw "位置";  //結點p不存在或結點p的後繼結點不存在
    else {
    Node *q; int x;
          q=p->next; x=q->data;  //暫存被刪結點
          p->next=q->next;  //摘鏈
          delete q;
          return x;

 }
 cout<<i<<endl;
 
}

int LinkList::Length( )
{
  Node  *p = first->next;
  int i = 0;
  while(p)
  {
    p = p->next;
    i++;
  }
  return i;
}
void main( )
{
   int b[ ]={1,2,3,4,5};
   LinkList a(b,5);   
   cout<<"單鏈表a的元素為:"<<endl;
   a.PrintList(); //顯示鏈表中所有元素
   cout<<"按位尋找第二個元素:"<<endl;
   cout<<"第二個元素為:";
   cout<<a.Get(2)<<endl; //尋找鏈表中第二個元素
   cout<<endl;
   cout<<"按值尋找5"<<endl;
   cout<<"值為5的元素位置為:";
   cout<<a.Locate(5)<<endl;        //尋找元素5,並返回在單鏈表中位置
   cout<<endl;
   cout<<"插入的數為:"<<endl;
   a.Insert(3,9);
   cout<<"執行插入操作後單鏈表a為:"<<endl;
   a.PrintList();            //輸出單鏈表b所有元素
   cout<<"刪除第"<<
   a.Delete(4);
   cout<<"個數"<<endl;
   cout<<"執行刪除操作後單鏈表a為:"<<endl;
   a.PrintList();
   cout<<endl;
  cout<<"最後單鏈表a的長度為:";   
 cout<<a.Length()<<endl;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.