练习三——单链表

#include <iostream>
using namespace std;
class List;
class LinkNode{
    friend List;
private:
    LinkNode *link;
    int data;
public:
    LinkNode(LinkNode *ptr=NULL){
        link=ptr;
    }
    LinkNode(const int &item,LinkNode *ptr=NULL){
        data=item;
        link=ptr;
    }
    ~LinkNode(){}
};
class List{
private:
    LinkNode *first;
public:
    List(){
        first=new LinkNode();
    }
    void MakeEmpty();
    ~List(){MakeEmpty();}
    LinkNode *getHead() const {
        return first;
    }
    void input(int EndTag);
    void output();
    LinkNode *Find(int x);
    LinkNode *Locate(int i);
    int GetData(int i,int &x);
    void SetData(int x,int i);
    int Insert(int x,int i);
    int Remove(int &x,int i);
};

void List::input(int EndTag) {
    int val;
    LinkNode *newnode;
    cin>>val;
    while(val!=EndTag){
        newnode=new LinkNode(val);
        newnode->link=first->link;
        first->link=newnode;
        cin>>val;
    }
}

void List::output(){
    LinkNode *p=first->link;
    while(p!=NULL){
        cout<<p->data<<endl;
        p=p->link;
    }
}

void List::MakeEmpty(){
    LinkNode *p;
    while(first->link!=NULL){
        p=first->link;
        first->link=p->link;
        delete p;
    }
}

LinkNode *List::Find(int x){
    LinkNode *p=first->link;
    while(p!=NULL){
        if(p->data==x){
            break;
        }
        p=p->link; 
    }
    return p;
}

LinkNode *List::Locate(int i){
    if(i<=0){
        return NULL;
    }
    LinkNode *p=first;
    int j=0;
    while(p!=NULL&&j<i){
        p=p->link;
    }
    return p;
}

int List::GetData(int i,int &x){
    LinkNode *p=Locate(i);
    if(p!=NULL){
        x=p->data;
        return 1;
    }
    else return 0;
}

void List::SetData(int x,int i){
    if(i<=0) return ;
    LinkNode *p=Locate(i);
    if(p!=NULL)
        p->data=x;
}

int List::Insert(int x,int i){
    LinkNode *p=Locate(i);
    if(p==NULL){
        return 0;
    }
    LinkNode *newNode=new LinkNode(x);
    newNode->link=p->link;
    p->link=newNode;
    return 1;
}

int List::Remove(int &x,int i){
    LinkNode *p=Locate(i-1),*q;
    if(p==NULL){
        return 0;
    }
    q=p->link;
    p->link=q->link;
    x=q->data;
    return 1;
}
int main(){
    List l;
    l.input(0);
    l.output();
}

 

posted @ 2019-03-16 21:41  UnderScrutiny  阅读(161)  评论(0编辑  收藏  举报