zoukankan      html  css  js  c++  java
  • 双链表(非循环)相关操作:创建、析构、删除、冒泡排序

    struct dulnode
    {
        int val;
        dulnode *pre;
        dulnode *next;
    };
    
    //这里创建的不是双循环链表
    dulnode* create_dulnode(int n)
    {
        if (n <= 0) return NULL;
    
        int i = 0;
        dulnode *head, *p1, *p2;
    
        //生成头节点
        head = new dulnode;
        head->val = rand() % RAND_MAX;
        head->pre = NULL; //头节点前驱节点为空
        p1 = head;
    
        for ( i = 1; i < n; i++)
        {
            p2 = new dulnode;
            p2->val = rand() % RAND_MAX;
    
            p2->pre = p1;
            p1->next = p2;
            p1 = p2;
        }
    
        p1->next = NULL;
        return head;
    }
    
    void del_dulnode(dulnode* &head, const int num)
    {
        //链表为空
        if (NULL == head) return;
    
        dulnode *temp, *p;
    
        //删除头节点
        while (head != NULL&&num == head->val)
        {
            temp = head;
            head = head->next;
            head->pre = NULL;
            delete temp;
            cout << "删除头节点:" << num << endl;
        }
    
        p = head;
        while (p != NULL)
        {
            if (num == p->val)
            {
                temp = p;
                p->pre->next = temp->next;
                p = temp->next;
                delete temp;
                cout << "删除节点:" << num << endl;
            }
            else
            {
                p = p->next;
            }
        }
    }
    
    void erase_dulnode(dulnode* head)
    {
        if (NULL == head) return;
    
        dulnode *temp, *p = head;
        while (p)
        {
            temp = p;
            p = p->next;
            delete temp;
        }
    }
    
    void print_dulnode(dulnode* head)
    {
        if (NULL == head) return;
    
        int i = 0;
        dulnode *p = head;
        while (p)
        {
            cout << " " << p->val << ",";
            p = p->next;
            
            if (5 == ++i)
            {
                i = 0;
                cout << endl;
            }
        }
        cout << endl;
    }
    
    int getdulnodelistlen(dulnode* head)
    {
        if (NULL == head) return 0;
    
        int n = 0;
        dulnode* p=head;
        while (p)
        {
            ++n;
            p = p->next;
        }
    
        return n;
    }
    
    void sortdulnodelist(dulnode* head)
    {
        //空双链表或者单节点双链表不做操作
        if (NULL == head || NULL == head->next) return;
    
        bool sign = false;
        int i, j, len = getdulnodelistlen(head), temp;
        dulnode *p;
    
        for (i = len - 1; i > 0; i--)
        {
            sign = false;
            p = head;
            for (j = 0; j < i; j++)
            {
                if (p->val > p->next->val)
                {
                    temp = p->val;
                    p->val = p->next->val;
                    p->next->val = temp;
    
                    sign = true;
                }
    
                p = p->next;
            }
    
            if (!sign) break; //此趟循环没有数值交换,排序已经完成
        }
    }
  • 相关阅读:
    Uva 10282 Babelfish
    Uva 10340 All in All
    Uva 11218 KTV
    Uva 193 Graph Coloring
    Uva 141 The Spot Game
    Uva 140 Bandwidth
    C#操作注册表(转)
    定位网站目录的各个符号的含义
    asp.net中错误:"The state information is invalid for this page and might be corrupted."
    用JavaScript获取客户端MAC地址(转)
  • 原文地址:https://www.cnblogs.com/jason1990/p/4703210.html
Copyright © 2011-2022 走看看