• 线性表总结


    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行,语法不懂,不明白为什么要这样写。
  • 相关阅读:
    Pymsql
    MySQL基础操/下
    MySQL基础操作
    前端学习之jquery/下
    前端学习之jquery
    Python之异常处理
    Python之模块和包导入
    Python之模块
    Python之面向对象上下文管理协议
    Python之面向对象slots与迭代器协议
  • 原文地址:https://www.cnblogs.com/ye12892/p/10597178.html
Copyright © 2020-2023  润新知