• 线性表总结


    # 1.
    1.代码功能:在一个有序链表里插入和删除若干个元素
    ## 代码1:
    ```
    #include <iostream> using namespace std; typedef int ElemType; typedef struct LNode //定义单链表结点类型 { ElemType data; struct LNode *next; //指向后继结点 } LNode,*LinkList; void CreateListR(LinkList &L,int n);//尾插法建链表 void DispList(LinkList L);//输出链表 void DestroyList(LinkList &L);//销毁链表 void ListInsert(LinkList &L,ElemType e);//有序链表插入元素e void ListDelete(LinkList &L,ElemType e);//链表删除元素e int main() { LinkList L,L1,L2; int n,e; cin>>n; CreateListR(L,n);//细节不表。 cin >> n; while (n--) { cin >> e; ListInsert(L, e); } cout << "插入数据后的链表:"; DispList(L); cout << endl; cin >> n; while (n--) { cin >> e; ListDelete(L, e); } cout << "删除数据后的链表:"; DispList(L); DestroyList(L);//销毁链表,细节不表 return 0; } void DispList(LinkList L) { LinkList p; int flag=1; p=L->next; if (L->next == NULL) { cout << "空链表!"; return; } while(p){ if(flag) { cout<<p->data;flag=0; } else { cout<<" "<<p->data; } p=p->next; } }
    ```
    ## 我的代码:
    ```

    void ListInsert(LinkList &L, ElemType e) {  //1
    LNode *m = L, *p;  //2
    while (m->next != NULL && m->next->data < e) {  //3
    m = m->next;  //4
    }  //5
    p = new LNode;  //6
    p->data = e;  //7
    p->next = m->next;  //8
    m->next = p;  //9
    }  //10
    void ListDelete(LinkList &L, ElemType e) {  //11
    LNode *m = L, *n;  //12
    if (m->next == NULL) {  //13
    return;  //14
    }  //15
    while (m->next != NULL && m->next->data != e) {  //16
    m = m->next;  //17
    }  //18
    if (m->next == NULL) {  //19
    cout << e << "找不到!" << endl;  //20
    }  //21
    else {  //22
    n = m->next;  //23
    m->next = n->next;  //24
    delete n;  //25
    }  //26
    }  //27

    ```

    代码分析:先根据要插入数的大小,寻找到要插入的位置,将要插入的数用s插入到链表中。要删除元素时,先找到要删除的元素再利用中间指针n将它删除,如果找不到要删除的元素,则说明那个元素不在链表中。

    不懂的地方:第2到第9行,语法不懂,为什么要那样写;

    第13到15行,语法不懂。

    # 2

    1.代码功能:合并两个有序链表,合并后的链表仍递增有序,合并后需要删除重复元素。

    ## 代码1:

    ```
    #include <iostream>
    using namespace std;
    typedef int ElemType;
    typedef struct LNode  		//定义单链表结点类型
    {
    	ElemType data;
    	struct LNode *next;		//指向后继结点
    } LNode,*LinkList;
    void CreateListR(LinkList &L, int n);//尾插法建链表
    void DispList(LinkList L);//输出链表
    void DestroyList(LinkList &L);//销毁链表
    void MergeList(LinkList &L1,LinkList L2);
    int main() 
    {
      LinkList L1,L2;
      int n,m;
      cin>>n;
      CreateListR(L1,n);//尾插法建链表L1,细节不表
      cin>>m;
      CreateListR(L2,m);//尾插法建链表L2
      MergeList(L1,L2);//合并链表
      DispList(L1);//输出链表L1,细节不表
      DestroyList(L1);//销毁链表,细节不表
      DestroyList(L2);//销毁链表
      return 0;
    }
    (```)

    ## 我的代码:
    ```

    void MergeList(LinkList &L1,LinkList L2){  //1
    LNode *pa,*pb,*r,*p;  //2
    pa = L1->next;  /3
    pb = L2->next;  //4
    L1->next = NULL;  //5
    r = L1;  //6
    while(pa != NULL && pb !=NULL){  //7
    if(pa->data<=pb->data){  //8
    p = new LNode;  //9
    p->data = pa->data;  //10
    if(pa->data == pb->data){  //11
    pb = pb->next;  //12
    }  //13
    r->next = p;  //14
    r = p;  //15
    pa = pa->next;  //16
    }  //17 
    else{  //18
    p = new LNode;  //19
    p->data = pb->data;  //20
    if(pb->data == pa->data){  //21
    pa = pa->next;  //22
    }  //23
    r->next = p;  //24 
    r = p;  //25
    pb = pb->next;  //26
    }  //27
    }  //28
    while(pa != NULL){  //29
    p = new LNode;  //30
    p->data = pa->data;  //31
    r->next = p;  //32
    r=p;  //33
    pa = pa->next;  //34
    }  //35
    while(pb != NULL){  //36
    p = new LNode;  //37
    p->data = pb->data;  //38
    r->next = p;  //39
    r=p;  //40
    pb = pb->next;  //41
    }  //42
    r->next = NULL;   //43
    }  //44

    ```

    代码分析:先比较L1和L2的元素,使p1指向L1,p2指向L2,链表L1设为空,选取较小的元素用尾插法插入到链表L1中,比较的过程中一起判断如果p1和p2中有重复的元素则删除重复的元素,到链表p1为空或者p2为空时,将不为空的的链表里剩余的元素全部插入到链表L1中。

    不懂的地方:第7到第28行,语法不懂,不明白为什么要这样写。

  • 相关阅读:
    DCR挖矿成本¥355.92,市价¥346.24——五大币种挖矿成本分析 2018-08-7
    智者见智——区块链3.0与未来
    梭哈10万入场,拿住不放,3年后收益过十亿,币圈传奇—大空翼
    从路人甲到叱咤币圈的神话:“打死也不卖币”的宝二爷
    小白眼里的区块链和币圈 —— 持币待涨的故事
    区块链如何赋能网络互助行业?来自众托帮+区块链的应用、车车助+纷享车链AutoChain应用
    中国青年网记者-阿里巴巴王坚:互联网已成为世界发展的基础设施
    读者咩叭:畅谈经济未来
    中青网财经:请一位心理学博士当CTO 只有马云敢这么做
    云科技时代:阿里云创造者写了《在线》,这是一本怎样的书?
  • 原文地址:https://www.cnblogs.com/ye12892/p/10588357.html
Copyright © 2020-2023  润新知