又一篇 鏈表練習

來源:互聯網
上載者:User

標籤:lin   else   include   argc   signed   stream   sign   iostream   tin   

#ifndef LINK_H#define LINK_H#include <memory>#include <iostream>struct ListNode {    int val;    std::shared_ptr<ListNode> next;};struct LinkList{    std::shared_ptr<ListNode> begin;    std::shared_ptr<ListNode> end;};std::shared_ptr<ListNode>  CreateNode(int i);bool CreateLinkList(LinkList& ll,std::shared_ptr<ListNode>& insertNode);bool AppendNode(LinkList& ll,std::shared_ptr<ListNode>& insertNode);void PrintLinkList(const LinkList& ll);std::shared_ptr<ListNode> FindInLinkList(LinkList& ll,int findValue);bool DeleteNode(LinkList& ll,int value);#endif // LINK_H

  

#include "link.h"std::shared_ptr<ListNode>  CreateNode(int i){    std::shared_ptr<ListNode> p(new ListNode());    p->val = i;    p->next = nullptr;    return p;}bool CreateLinkList(LinkList& ll,std::shared_ptr<ListNode>& insertNode){    bool ret = false;    ll.begin = ll.end = insertNode;    ret =true;    return ret;}bool AppendNode(LinkList& ll,std::shared_ptr<ListNode>& appendNode){    bool ret = false;    if( nullptr == appendNode){        return ret;    }    if(nullptr == ll.end || nullptr == ll.begin){        ll.begin = ll.end = appendNode;        ret = true;        return ret;    }    ll.end->next = appendNode;    ll.end = appendNode;    ret = true;    return ret;}void PrintLinkList(const LinkList& ll){    std::shared_ptr<ListNode> p = ll.begin;    std::cout << "print linklist:  " << std::endl;    while( p != nullptr ){        std::cout << p->val << " ";        p = p->next;    }    std::cout << std::endl;    std::cout << std::endl;}std::shared_ptr<ListNode> FindInLinkList(LinkList& ll,int findValue){    std::shared_ptr<ListNode> p = ll.begin;    do{        if(p->val == findValue){           break;        }        p= p->next;    }while(p != nullptr);    return p;}bool DeleteNode(LinkList& ll,int value){    bool ret = false;    if(nullptr == ll.begin || nullptr == ll.end){        return ret;    }    if(ll.begin->val == value){        if(ll.begin == ll.end){            ll.begin = ll.end = nullptr;        }else{            ll.begin = ll.begin->next;        }        ret = true;        return ret;    }    // 遍曆鏈表 尋找符合的node    std::shared_ptr<ListNode> p = ll.begin;    while(p->next != nullptr){       if(p->next->val == value){           break;       }       p = p->next;    }    if(p->next != nullptr){        if(p->next == ll.end){            ll.end = p;        }        p->next = p->next->next;    }    ret = true;    return ret;}

  

// 123.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include <iostream>#include <assert.h>#include "link.h"#include <windows.h>void TestLinkList() {LinkList ll;if (!AppendNode(ll, CreateNode(1))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);if (!AppendNode(ll, CreateNode(2))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);if (!AppendNode(ll, CreateNode(3))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);std::shared_ptr<ListNode> p = FindInLinkList(ll, 7);assert(p == nullptr);p = FindInLinkList(ll, 2);assert(p != nullptr && p->val == 2);DeleteNode(ll, 3);std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);DeleteNode(ll, 2);std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);DeleteNode(ll, 1);// std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;// std::cout << "end:" << ll.end  << " end.val:" << ll.end->val  << std::endl;PrintLinkList(ll);if (!AppendNode(ll, CreateNode(1))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);if (!AppendNode(ll, CreateNode(2))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);if (!AppendNode(ll, CreateNode(3))) {std::cerr << __FUNCTION__ << "().  line:" << __LINE__ << "  Error !" << std::endl;return;}std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);DeleteNode(ll, 1);std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);DeleteNode(ll, 2);std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;std::cout << "end:" << ll.end << " end.val:" << ll.end->val << std::endl;PrintLinkList(ll);DeleteNode(ll, 3);//std::cout << "begin:" << ll.begin << " begin.val:" << ll.begin->val << std::endl;//std::cout << "end:" << ll.end  << " end.val:" << ll.end->val  << std::endl;PrintLinkList(ll);}void TestLinkListMemory() {LinkList ll; LinkList ll0;while(1){for (int i = 1; i<1000; ++i) {AppendNode(ll, CreateNode(i));}for (int i = 1; i<1000; ++i) {DeleteNode(ll, i);}std::cout << "begin:" << ll.begin << std::endl;std::cout << "end:" << ll.end << std::endl;PrintLinkList(ll);}}unsigned int dictIntHashFunction(unsigned int key){key += ~(key << 15);key ^= (key >> 10);key += (key << 3);key ^= (key >> 6);key += ~(key << 11);key ^= (key >> 16);return key;}int main(int argc, char *argv[]){TestLinkList();TestLinkListMemory();return 0;}

  

又一篇 鏈表練習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.