• 单向链表类


    #pragma once
    #include "stdafx.h"
    
    template<class T>
    class CLinkList
    {
    public:
        typedef struct LNode{
            T data;
            struct LNode * next;
        }LNode;//单向链表
        LNode * list;//头指针
        CLinkList()
        {
            length=0;
            list=new LNode;
            list->next=NULL;//头指针data不赋值
        }
    
    
    
        void Add(T data)
        {
            length++;       //元素增加
            LNode * now=list;
            while(now->next) now=now->next;
            LNode * tmp=new LNode;
            tmp->next=NULL;
            tmp->data=data;
            now->next=tmp;
        }
    
        void Delete(int index)
        {
            if(index<0) return;//防止下溢
            int i=0;
            LNode * now=list;
            while(now->next && i<index) //防止上溢
            {
                now=now->next;
                i++;
            }
            if(now->next)//防止上溢
            {
                length--;     //元素减少
                LNode * del=now->next;
                now->next=del->next;
                delete del;
            }
        }
    
        void Insert(int index,T data)
        {
            if(index<0) return;//防止下溢
            int i=0;
            LNode * now=list;
            while(now->next && i<index) //防止上溢
            {
                now=now->next;
                i++;
            }
            if(now->next)//防止上溢
            {
                length++;    //元素增加
                LNode * tmp=new LNode;
                tmp->next=now->next;
                tmp->data=data;
                now->next=tmp;
            }
        }
    
        T GetAt(int index)
        {
            if(index<0) return list->next->data;//防止下溢
            int i=0;
            LNode * now=list;
            while(now->next && i<index) //防止上溢
            {
                now=now->next;
                i++;
            }
            return now->next->data;
        }
    
        void SetAt(int index,T data)
        {
            if(index<0) return;//防止下溢
            int i=0;
            LNode * now=list;
            while(now->next && i<index) //防止上溢
            {
                now=now->next;
                i++;
            }
            now->next->data=data;
        }
    
    /*
        T * GetRange(int a,int b)
        {
            
        }*/
    
        T operator [] (int index)
        {
            return GetAt(index);
        }
    
        int GetLen(){return length;}
    
        void display()
        {
            LNode * now=list->next;
            while(now)
            {
                printf("%d,",now->data);
                now=now->next;
            }
            printf("
    ");
        }
    
    
    
    protected:
    
    private:
        int length;
    };
  • 相关阅读:
    用js获取当前页面的url
    innerHTML 和 innertext 以及 outerHTML
    scrollWidth,clientWidth与offsetWidth的区别
    top、postop、scrolltop、offsetTop、scrollHeight、offsetHeight、clientHeight
    两个文字向上滚动案列
    mysql 经典案例
    学习笔记11
    顺时针打印矩阵
    重建二叉树
    镜像二叉树
  • 原文地址:https://www.cnblogs.com/TQCAI/p/7606783.html
Copyright © 2020-2023  润新知