数据结构课——链式存储结构代码c++实现

 链式存储结构代码 c++实现

#include
using namespace std;
struct Node
{
    int data;
    Node *next;
};

class LinkList{
    public:
        LinkList()
        {
            first = new Node;           //申请一个Node类型的结点/存储空间
                                        //因为是作为头结点,所以不需要给数据域赋值
            first->next = NULL;         //建立一个只有头结点的空链表 所以next指向NULL
        }

        //头插法给链表赋初值
        LinkList(int a[],int n){        //数组形参数作为给单链表赋值
            first = new Node;
            first->next = NULL;         //立一个只有头结点的空链表
            for(int i = 0;i < n;i++ ){
                Node *s = new Node;
                s->data = a[i];         //赋值
                s->next = first->next;  //每个新建的结点都要链接之前头结点所指向的结点
                first->next = s;        //头插法,每个元素结点都插在头结点后
            }
        }

        //尾插法给单链表赋初值
        void AddFromLast(int a[],int n){
            Node *p = first;            //设立工作指针,使他始终指向单链表的尾部
            for(int i = 0;i < n;i++){
                Node *s = new Node;     //申请新的结点
                p->next = s;            //原链表的尾部next指针执行新的结点
                s->data = a[i];         //赋值
                p = s;                  //尾指针后移
            }
            p->next = NULL;             //尾指针的next指向空
        }

        void AddData(int a,int position){
            Node *s =new Node;          //申请Node类型的空间
            Node *p;                    //工作指针
            p = first;
            s->data = a;
            int count = 0;
            //下面这个循环的结果就是工作指针p指向了第position-1个结点
            while(count != position-1){
                p = p->next;
                count++;
            }
            //开始执行插入
            s->next = p->next;          //先让s->next值向第position 个结点,顺序不能乱
            p->next = s;                //第position-1个结点的next指向新添加的结点
            //给结点赋值
            s->data = a;
        }

        //析构函数  单链表的空间是用new申请的,只能用delete删除
        ~LinkList(){

             while(first->next != NULL){
                Node *p = first;
                first = first->next;
                delete p;
             }
        }

        //删除指定的结点
        int DeleteData(int i){
            Node *p = first;
            Node *r;
            int count = 0;
            while(count != i-1){
                p = p->next;
                count++;
            }
            r = p->next;
            p->next = r->next;
            int x = r->data;
            delete r;
            return x;
        }

        //遍历所有的数据
        void ShowAll(){
            Node *p =first->next;
            while(p != NULL){
                cout<data<next;
            }
        }
        //寻找最大最小值
        int Xunzhao1()
        {
            int maxx = 0;
            //int minn = 0x3f3f3f3f;
            Node *p =first->next;
            while(p != NULL)
            {
                maxx = max(maxx,p->data);
                //minn = min(minn,p->data);
                //cout<data<next;
            }
            return maxx;
        }
        int Xunzhao2()
        {
            //int maxx = 0;
            int minn = 0x3f3f3f3f;
            Node *p =first->next;
            while(p != NULL)
            {
                //maxx = max(maxx,p->data);
                minn = min(minn,p->data);
                //cout<data<next;
            }

            return minn;
        }
        //按位查找
        int SelectByPosition(int position){
            Node *p = first;
            int count = 0;
            while(count != position){
                p = p->next;
                count++;
            }
            return p->data;
        }

    private:
    Node *first;//头指针
};

int main()
{

    int a[10] = {1,2,3,4,5,6,7,8,9,0};
    LinkList link(a,10);
    link.ShowAll();
    cout<

 

你可能感兴趣的:(数据结构课——链式存储结构代码c++实现)