zoukankan      html  css  js  c++  java
  • 线性表的合并

    /*
    	线性表的合并 
    */ 
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <stdbool.h>
    typedef int ElemType;
    
    typedef struct Lnode{
    	ElemType data;
    	struct Lnode * next;
    }LNode, * LinkList;
    
    /*
    	单链表的建立:尾插法 
    */
    LinkList CreateList_R(){
    	LinkList L = (LinkList)malloc(sizeof(LNode));
    	L->next = NULL;
    	int x;
    	LinkList p, r = L; 
    	scanf("%d", &x);
    	while(x != 9999){
    		p = (LinkList)malloc(sizeof(LNode));
    		p->data = x;
    		p->next = NULL;
    		r->next = p;
    		r = p; 
    		scanf("%d", &x);
    	} 
    	return L;
    }
    
    /*
    	求单链表L的长度 
    */
    int ListLength_L(LinkList L){
    	int len = 0;
    	LinkList p;
    	p = L->next;
    	while(p){
    		p = p->next;
    		len++;
    	}
    	return len;
    }
    
    /*
    	取值:取单链表中第i个元素的内容 
    */
    int  GetElem_L(LinkList L, int i, ElemType * e){
    	LinkList p;
    	p = L->next;
    	int j = 1;
    	while(p && i > j){
    		p = p->next;
    		j++;
    	}
    	if(!p || j > i ) return 0;
    	*e = p->data;
    	return 1;
    }
    
    /*
    	查找:按值查找:根据指定数据获取数据所在位置(序号)
    */
    int LocateElem_L2(LinkList L, ElemType e){
    	LinkList p;
    	p = L->next;
    	int j = 1;
    	while(p && p->data != e){
    		p = p->next;
    		j++;
    	}
    	if(p)return j;
    	else return 0;
    }
    /*
    	插入:在第i后结点插入新结点 
    */
    int ListInsert_L(LinkList L, int i, ElemType e){
    	LinkList p;
    	p = L;
    	int j = 0;
    	while(p && i-1 > j){
    		p = p->next;
    		j++;
    	}
    	if(!p || j > i - 1) return -1;
    	LinkList s = (LinkList)malloc(sizeof(LNode));
    	s->data = e;
    	s->next = p->next;
    	p->next = s;
    	return 1;
    }
    
    /*
    	线性表的合并 
    */ 
    void Union(LinkList La, LinkList Lb){
    	int La_len = ListLength_L(La);
    	int Lb_len = ListLength_L(Lb);
    	int i;
    	int e;
    	for(i = 1; i <= Lb_len; i++){
    		GetElem_L(Lb, i, &e);
    		if(!LocateElem_L2(La, e)){
    			ListInsert_L(La, La_len++, e);
    		}
    	}
    }
    
    /*
    	链表的遍历 
    */
    void traverse_list(LinkList L){
    	LinkList p;
    	p = L->next;
    	while(p){
    		printf("%d ", p->data);
    		p = p->next;
    	}
    	printf("
    ");
    	return;
    }
    int main(){
    	//第一个单链表La
    	printf("--------------创建第一个单链表------------
    "); 
    	LinkList La = CreateList_R();
    	//第二个单链表La
    	printf("--------------创建第二个单链表------------
    ");
    	LinkList Lb = CreateList_R();
    	Union(La, Lb);
    	traverse_list(La);
    	return 0;
    }
    
    我亦无他,惟手熟尔
  • 相关阅读:
    Task.Delay() 和 Thread.Sleep() 区别
    task 如何终止线程
    旧版委托线程回忆
    c# 线程的优先级
    Java——Java泛型
    Java——Java面向对象
    Java——Java连接Jira,创建、修改、删除工单信息
    软件——Jira是什么
    Java——一文读懂Spring MVC执行流程
    Java——SSM整合所需的Maven配置文件
  • 原文地址:https://www.cnblogs.com/AsuraPlus/p/15415732.html
Copyright © 2011-2022 走看看