• LinkList Operation


    链表典型数据结构:

    #define ElemType int
    typedef struct LinkNode{
        ElemType value;
        struct LinkNode* next;
    };


    相比于顺序结构,链式存储结构好处在于在任意位置插入或者删除元素,操作时间比较短。 1 节点回收以及申请

        注意指针和节点的关系,防止产生游离节点。记住不管是节点内容以及指针一定要初始化

    LinkList Create_Linkist(int elem){
       LinkList head;
       head = (LinkList)malloc(sizeof(LinkNode));
       if(!head) exit(EXIT_FAILURE);
       head->value = elem;
       head->next = NULL;
       return head;
    }

    假设head指针指向第一个元素,那么插入元素时

    无序插入表头插入

    void Insert_Head(LinkList head, int elem){
        if(!head) head = Create_Linkist(elem);
        else{
          LinkList temp = Create_Linkist(elem);
          temp->next = head->next;
          head->next = temp;
        }
    }
    无序插入表尾插入 (q 为表尾指针)

    void Insert_Tail(LinkList &head, int elem){
        if(!head) head = Create_Linkist(elem);
        else{
            LinkList temp = head;
    
            while(temp->next) temp = temp->next;
                temp->next = Create_Linkist(elem);;
        }
    }
    有序插入操作递归实现

    void InsertSorted(LinkList &head, int elem){
        if(head == NULL || head->value >= elem){
            LinkList temp = Create_Linkist(elem);
            temp->next = head;
            head = temp;
        }
        else InsertSorted(head->next, elem);
    }
    打印函数

    void print(LinkList head){
        while(head){
            cout<<head->value<<" ";
            head = head->next;
        }
    }
    源代码:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    #define ElemType int
    typedef struct LinkNode{
        ElemType value;
        struct LinkNode* next;
    }*LinkList;
    
    LinkList Create_Linkist(int elem){
       LinkList head;
       head = (LinkList)malloc(sizeof(LinkNode));
       if(!head) exit(EXIT_FAILURE);
       head->value = elem;
       head->next = NULL;
       return head;
    }
    
    void Insert_Head(LinkList head, int elem){
        if(!head) head = Create_Linkist(elem);
        else{
          LinkList temp = Create_Linkist(elem);
          temp->next = head->next;
          head->next = temp;
        }
    }
    
    void Insert_Tail(LinkList &head, int elem){
        if(!head) head = Create_Linkist(elem);
        else{
            LinkList temp = head;
    
            while(temp->next) temp = temp->next;
                temp->next = Create_Linkist(elem);;
        }
    }
    
    void InsertSorted(LinkList &head, int elem){
        if(head == NULL || head->value >= elem){
            LinkList temp = Create_Linkist(elem);
            temp->next = head;
            head = temp;
        }
        else InsertSorted(head->next, elem);
    }
    
    void print(LinkList head){
        while(head){
            cout<<head->value<<" ";
            head = head->next;
        }
    }
    
    int main()
    {
        LinkList linkTest;
        int testNum;
        cout<<"enter test number: ";
        cin>>testNum;
        linkTest = Create_Linkist(testNum);
        print(linkTest);
        cout<<linkTest<<endl;
        InsertSorted(linkTest, --testNum);
        //Insert_Tail(linkTest, ++testNum);
        //Insert_Head(linkTest, ++testNum);
        cout<<"link after insert: "<<endl;
        print(linkTest);
    
        system("pause");
        return 0;}
    
    
    
    
    
    
    
    
    
    
    
        
            

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Oracle 获取本周、本月、本季、本年的第一天和最后一天(转载)
    easyui tabs页签显示在底部属性
    java mybatis XML文件中大于号小于号转义(转载)
    原生JS日历 + JS格式化时间格式
    ajax之async属性
    Easyui 行编辑
    css中实现显示和隐藏(转)
    layer弹出层 获取index
    js中关于json常用的内容、js将数字保留两位小数
    发布项目到github上web服务器来运行
  • 原文地址:https://www.cnblogs.com/wenwangt/p/4925404.html
Copyright © 2020-2023  润新知