zoukankan      html  css  js  c++  java
  • 链表的基本运用实现整理

    写在前面:分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~

    编程路漫之远兮,运架构体之帷幄;
    劝君专注案前事,亦是杯酒敬苍生;

    头文件及其相关操作

    # include <stdio.h>
    # include <stdlib.h>
    # include <cstdlib>
    
    
    typedef int ElemType;
    typedef struct LNode
    {
    	ElemType data ; 
        struct LNode *next ;
    }LNode , *LinkList ;
    
    typedef enum Bool
    {
        FALSE,TRUE
    }Bool; 
    

    函数声明

    Bool CreateList_L(LinkList &L,int n) ;
    void print(LinkList L) ;
    Bool GetElem_L(LinkList L,int i, ElemType &e) ;
    Bool ListInsert_L (LinkList &L,int i , ElemType e) ;
    Bool ListDelete_L(LinkList &L ,int i ,ElemType &e) ;
    void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) ;
    

    函数功能

    创建链表

    Bool CreateList_L(LinkList &L,int n){
    	
    	LinkList p ;
    	L = (LinkList) malloc (sizeof (LNode))   ;
    	L->next = NULL ;
    	printf("请输入元素个数
    ") ;
    	for(int i=n ; i>0 ; --i) {
    		p = (LinkList) malloc (sizeof(LNode)) ;
    		printf("第%d个元素
    ",i) ; 
    		scanf("%d",&p->data) ;
    		p->next = L->next ;
    		L->next = p ; 
    	}
    	return TRUE ;
    	
    }
    

    输出链表

    void print(LinkList L){
    	LinkList p = L->next ;
    	while(p!= NULL){
    		printf("%d	",p->data);
             p = p->next; 
    	}
    }
    
    

    按位查找与获取

    Bool GetElem_L(LinkList L,int i, ElemType &e){
    		LinkList p ;
    		p = L->next ;
    		int j =1 ;
    		while(p&& j<i){
    			p = p->next ;
    			++j ; 
    		}
    		
    		if(!p || j>i) return FALSE ;
    		e = p->data ;
    		return TRUE ;
    } 
    

    插入链表

    Bool ListInsert_L (LinkList &L,int i , ElemType e){
    	LinkList p ;
        LinkList s ;
    	p = L ;
    	int j = 0 ;
    	while (p && j<i-1){
    		p = p->next ;
    		++j ;
    	}
    	
    	if(!p || j> i-1) return FALSE ;
    	s = (LinkList) malloc (sizeof(LNode)) ;
    	s->data = e ;
    	s->next = p->next ;
    	p->next = s ;
    	
    	return TRUE ;
    } 
    

    删除链表

    Bool ListDelete_L(LinkList &L ,int i ,ElemType &e){
    		LinkList p ; 
    		LinkList q ; 
    		p = L ;
    		int j = 0 ;
    		while(p->next && j<i-1){
    			p = p->next ;
    			++j ;
    		}
    		
    	if(! (p->next) || j>i-1 ) return FALSE ;
    	q = p->next ;
    	p->next= q->next ;
    	e = q->data ;
    	free(q) ;
    	return TRUE ;	
    } 
    

    合并链表

    void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){
    	LinkList pa;
    	LinkList pb ;
    	LinkList pc ;
    	
    	pa = La->next ;
    	pb = Lb->next ;
    	Lc = pc =La ;
    	
    	while(pa && pb){
    		if(pa->data <= pb->data){
    			pc->next = pa ;
    			pc = pa ;
    			pa = pa->next ;
    		} else {
    			pc->next = pb ;
    			pc = pb ;
    			pb = pb->next ;
    		}
    	}
    	pc -> next = pa ? pa : pb ;
    	free(Lb) ; 
    } 
    

    主函数

    int main(){
        ElemType e;
        ElemType elem;
    	LinkList L ; 
    	LinkList L1 ; 
    	LinkList L2 ; 
    	LinkList L3 ; 
    	int num,num1,num2,num3 ;
    	
    	
    	printf("1、创建链表
    ") ;
    	if(!CreateList_L(L,5))
            printf("链表创建失败!
    ");
        else
            printf("链表创建成功!
    ");
    	 //CreateList_L(L,5) ;
    	printf("创建的链表表为
    ") ;
    	print(L) ;
    	
    	printf("
    
    ") ;
    	printf("2、链表的按位查找
    ") ;
    	printf("请输入要查找的位序
    ") ;
    	scanf("%d",&num) ; 
    	GetElem_L(L,num,e) ;
    	printf("
    
    ") ;
    	printf("顺序表L1的第%d个元素是%d",num,e);
    	
    	printf("
    
    ") ;
    	printf("3、链表的插入操作
    ") ;
    	printf("请输入要插入的位序与元素") ;
    	scanf("%d%d",&num1,&num2)  ;
    	ListInsert_L(L,num2,num2) ;
    	print(L) ;
    	
    	printf("
    
    ") ;
        printf("4、链表的删除操作
    ") ;
    	printf("请输入要删除的位序") ;
    	scanf("%d",&num3)  ;
    	ListDelete_L(L ,num3 ,elem) ;
    	printf("删除元素是%d
    ",elem);
    	
    	printf("
    
    ") ;
    	printf("5、有序链表的合并开始") ;
    	printf("
    
    ") ;
    	printf("5.1、创建待合并的有序链表1
    ") ; 
    	CreateList_L(L1,5) ;
    	//print(L) ;
    	printf("
    
    ") ;
    	printf("有序链表1为
    ") ;
    	print(L1) ;
    	
    	printf("
    
    ") ;
    	printf("5.2、创建待合并的有序链表2
    ") ; 
    	CreateList_L(L3,5) ;
    	printf("有序链表2为
    ") ;
    	print(L3) ;
    	printf("
    
    ") ;
    	MergeList_L(L3,L1,L2) ;
    	printf("5.3、合并结果为
    ") ; 
    	print(L2) ;
    	
    
    }
    

    输出结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
    【Java MyBatis Generator】使用generator自动生成Dao,Mapping和实体文件
    Java连接MQ的实例, 测试类
    与MQ通讯的完整JAVA程序
    MQ中将消息发送至远程队列的配置
    IBM MQ 使用指南
    Java调用MQ队列
    IBM MQ介绍
    HttpWebRequest和HttpWebResponse
    SQL SERVER中DBLINK的实现
  • 原文地址:https://www.cnblogs.com/lzhCreate/p/13948263.html
Copyright © 2011-2022 走看看