• 练习三——单链表


    #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();
    }
  • 相关阅读:
    【转】Oracle 查询每天执行慢的SQL
    【转】StringBuilder与String的区别
    【转】C#单例模式实现
    【转】设计模式
    【转】十大排序算法
    ASP.NET jQuery 随笔 从DropDownList获取选择的text和value值
    ASP.NET jQuery 随笔 显示CheckBoxList成员选中的内容
    ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
    ASP.NET JQuery 随笔-搜索框默认提示
    JS 某一区域内所有CheckBox全选和取消全选(.net)
  • 原文地址:https://www.cnblogs.com/wangjianupc/p/10587165.html
Copyright © 2020-2023  润新知