• 练习三——单链表


    #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();
    }
  • 相关阅读:
    SharePoint 2013 开发——开发并部署Provider-hosted APP
    SharePoint 2013 开发——Provider-hosted APP准备工作
    (转)CString工作原理和常见问题分析
    WinDbg调试 C# dmp
    使用fastcall 代替汇编hook thiscall
    Windows Socket 编程_单个服务器对多个客户端简单通讯
    IOCP模型与网络编
    非阻塞模式(ioctlsocket)
    GDT与LDT
    常见程序入口点(OEP)特征
  • 原文地址:https://www.cnblogs.com/wangjianupc/p/10587165.html
Copyright © 2020-2023  润新知