非循环单链表的基本操作

来源:互联网 发布:安知玉如意书包网结局 编辑:程序博客网 时间:2024/06/06 09:47
 

#include<iostream>

using namespace std;

class LinkNode{

public:

         int data;

         LinkNode *next;

};

typedef LinkNode* NodePointer;

class LinkList{

public:

         int insertData();

         int insert(int i,int e);

         int deleteElem(int i,int &e);

         void deleteRepeat();

    int getElem(int i,int &e);

         int getLength();

         bool isEmpty();

         void display();

         LinkList();

         int clear();

         virtual ~LinkList();

protected:

         NodePointer head;

};

LinkList::LinkList(){

         head=new LinkNode;      //设头结点

         head->next=NULL;

}

 LinkList::~LinkList(){

         clear();

}

int LinkList::clear(){

         NodePointer p,q;

         q=head;

         while(q){

                   p=q;

                   q=q->next;

                   delete p;

         }

         head->next=NULL;

         return 0;

}

int LinkList::insertData(){

             int e;

             NodePointer p;

                   NodePointer s;

             p=head;

                   cout<<"请输入10个整形结点并以Enter键结束 "<<endl;

         for(int i=0;i<10;i++){

        s=new LinkNode;

                   cin>>e;

                   s->data=e;

                   s->next=p->next;

                   p->next=s;

                   p=p->next;

         }

         return 0;

}

 

int LinkList::insert(int i,int e){

        

    int j=1;

         NodePointer p,s;

         p=head;  

         for( j;j<i;j++){

                   p=p->next;

         }

         if(i<j||!p) return -1;

         s=new LinkNode;

         s->data=e;

         s->next=p->next;

         p->next=s;

         return 0;

}

int LinkList::deleteElem(int i,int &e){

         int j=1;

         NodePointer p,q;

         p=head;

         //p=p->next;

         for(j;j<i;j++){

                   p=p->next;

         }

         if(i<1||!p) return -1;

    q=p->next;

         p->next=q->next;

         e=q->data;

    delete q;

         return 0;

}

int LinkList::getElem(int i,int &e){

         LinkNode *p;

         p=head;

         p=p->next;

         for(int j=1;j<i;j++){

                   p=p->next;

         }

         e=p->data;

         return 0;

}

void LinkList::display(){

         LinkNode *p;

         p=head;

         p=p->next;

         cout<<"链表为:"<<endl;

         while(p){

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

                   p=p->next;

         }

}

int main(){

         int i;

         int e;

         int b;

         int f;

         int g;

         int e1;

         LinkList a;

         a.insertData();

         a.display();

         cout<<endl;

         cout<<"输入你要插入的位置和插入的结点:";

         cin>>i>>e1;

    a.insert(i,e1);

         a.display();

         cout<<endl;

         cout<<"你要删除第几结点:";

         cin>>f;

         a.deleteElem(f,e);

         cout<<"删除元素为:"<<e<<endl;

         a.display();

         cout<<endl;

         cout<<"你要查找第几个结点:";

         cin>>g;

         a.getElem(g,b);

         cout<<"你查找位置的结点数据域为:"<<b<<endl;

         return 0;

}

//我没有把每一个函数都实现,自己可以实现一下

原创粉丝点击