zoukankan      html  css  js  c++  java
  • 线性表总结

    # 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行,语法不懂,不明白为什么要这样写。

  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/ye12892/p/10588357.html
Copyright © 2011-2022 走看看