zoukankan      html  css  js  c++  java
  • 数据结构 链表及合并

          顺序表相比,链表增强了数据间的连接,一个接一个,发现July的博客比较深层次,还是打好基础再了解更深一层的东西。

          还是分LinkList.h,LinkList.c,main.c

         之前匆匆忙忙赶东西时,就copy一大段改改就交了。自己重写后发现诸多问题在这一块里。

           LinkList.h

    #include<stdio.h>
    #include<malloc.h>
    typedef int DataType;
    typedef struct SimpleLinkList *Node;
    struct SimpleLinkList{
    	DataType info;
    	Node link;
    } ;
    typedef struct SimpleLinkList *LinkList;
    
    LinkList CreateNUllList();
    int isNull(LinkList linklist);
    int insertPost(LinkList linklist,Node node,DataType element);
    int insertBack(LinkList linklist,Node node,DataType element);
    int printList(LinkList linklist);
    Node searchElement(LinkList linklist,DataType element);
    DataType showValue(LinkList linklist,Node node);
    int deleteElement(LinkList linklist,DataType element);
    LinkList combine(LinkList one,LinkList another);
    


    LinkList.c


    #include "LinkList.h"
    LinkList CreateNUllList(){
    	LinkList linklist = (LinkList)malloc(sizeof(struct SimpleLinkList));
    	if(linklist != NULL)
    		linklist -> link = NULL;
    	else 
    		printf("create fail!");
    	return linklist;
    } 
    
    
    int isNull(LinkList linklist){
    	return (linklist != NULL); // not null return 1 
    }
    
    int insertPost(LinkList linklist,Node node,DataType element){
    	Node temp = (Node)malloc(sizeof(struct SimpleLinkList));
    	// 前插  注意如果没有任何元素 那么把头结点指向 element 
    	if(temp == NULL){
    		printf("insert fail");
    		return 0;
    	}else{
    		for(linklist;linklist!= NULL; linklist = linklist -> link) {
    			if(linklist	 -> link == node){
    				temp ->info = element;
    				linklist ->link = temp;
    				temp ->link = node;
    			}
    		}
    	}
    	return 1;
    	//前插的节点 是要我们自己传参注意 而不是把函数写成 
    
    
    } 
    // insert forward
    //带头节点的链表 头结点没有值 
    // 其实 所谓的后插   是后插 但是现在的node是 链表  实际插入的时候
    //所以  node的link是第一个数  所谓变成“前插” 
    int insertBack(LinkList linklist,Node node,DataType element){
    	Node temp = (Node)malloc(sizeof(struct SimpleLinkList));
    	if(temp == NULL){	
    		printf("insert element fail!");
    		return 0;
    	}
    	temp -> info = element; 
    	temp -> link = node -> link;
    	node -> link = temp;
    	
    	
    	return 1;
    } //insert back
    
    int printList(LinkList linklist){
    	if(linklist == NULL){
    		printf("it is null");
    		return 0;
    	}
    	
    	while(linklist -> link != NULL){
    		printf("%2d",linklist->link->info);
    		linklist  = linklist -> link ;
    	}
    	printf("
    ");
    	return 1;
    	
    }
    
    Node searchElement(LinkList linklist,DataType element){
    	Node node;
    	if(linklist == NULL){
    		printf("the element was not found");
    		return NULL;
    	} 
    	node = linklist -> link; 
    	while(node != NULL && node -> info != element){
    		node = node -> link; 
    	} 
    	if(node  == NULL){
    		return NULL;
    	}
    	return node;
    		
    }
    DataType showValue(LinkList linklist,Node node){
        Node temp;
    	if(linklist == NULL){
    		printf("the element was not found");
    		return NULL;
    	} 
    	temp = linklist -> link; 
    	while(temp != NULL && temp -> link != node){
    		temp = temp -> link; 
    	} 
    	return node;
    }
    
    int deleteElement(LinkList linklist,DataType element){
        Node node;
        Node temp;
    	if(linklist == NULL){
    		printf("the element you deleted was not found");
    		return 0;
    	} 
    	node = linklist ; 
    	while(node ->link!= NULL && node ->link-> info != element){
    		// link 的info   是element之前。 
    		node = node -> link; 
    	//	printf("test
    ");link ->info 先要判断link为不为空! 
    	} 
    //	printf("test2");
    	if(node->link== NULL ){
    		printf("the element you deleted was not found
    ");
    		return 0;
    	} else {
    		temp = node->link;
    		node -> link = temp -> link;
    		free(temp);
    		printf("the element is deleted
    ");
    		return 1;
    	}
    	
    }
    
    LinkList combine(LinkList one,LinkList another){
    	//终于知道错在哪里 节点没有分配 根本就不存在  数据结构就是数据结构
    	//原本是空的  malloc一个节点 插进去 
    	
    	//问题二: one ->link!= NULL 这是对的   	while(one!= NULL)
    	//当one 为null了  也就没有link了 怎么 malloc 新的东西都是没用的。 
    	Node temp ;
    	LinkList linken;
    	linken = one;
    	while(one ->link!= NULL)
    		one = one ->link;
    	
    	for(another;another->link!= NULL; another = another ->link){
    		temp = (Node)malloc(sizeof(struct SimpleLinkList));
    		temp ->info = another ->link ->info;
    		temp ->link = another ->link ->link;
    		one ->link = temp;
    		one = one ->link;
    	} 
    	return linken;
    	// linken 临时指向头节点  能返回整个表 
    } 


    main.c


    #include "LinkList.h"
    int main(){
    	int i,element;
    	LinkList linklist1 = CreateNUllList();
    	LinkList linklist2 = CreateNUllList();
    	LinkList linklist3 = CreateNUllList();
    	Node note = linklist1;
    	Node note2 = linklist1;
    	//if(note != NULL) printf("yes");
    	for(i = 0;i<10;i++){
    	    
            while(note != NULL)
    				note = note -> link;		
            insertPost(linklist1, note,i);
          
     	
    	
    	}//终于完成  前插  使得 
     
     	for(i = 0;i<10;i++){		
    		insertBack(linklist2, linklist2,i);
    	}
    	//printf("%d",linklist->link->info);	
    	printList(linklist1);
    	printList(linklist2);
    	
    /*	printf("input the value of the element you search
    ");
     	scanf("%d",&element);
     	if(searchElement(linklist1,element) == NULL)
    	 	printf("not found"); 
    	for(i=0;note2 != searchElement(linklist1,element);note2 = note2 ->link,i++ )
    		;//空语句 不执行 
    	if(searchElement(linklist1,element) == NULL)
    	 	printf("not found
    "); 
    	else
    		printf("%d is the %dth element of the linklist
    ",element,i); 
    	
    	printf("input the value of the element you delete
    ");
     //	scanf("%d",&element);
     	//deleteElement(linklist1,element);
     	
    //	printList(linklist1); 
    	*/
    	linklist3 = combine(linklist1,linklist2);
    	printList(linklist3); 
    	return 0;
    } 


           一个月多多少少学了点。java的LinkList原来这样实现,单纯用的话很简单。

       

  • 相关阅读:
    第十一章关联容器
    第十章泛型算法
    第九章
    第八章
    阅读记录
    java.lang.Class阅读笔记
    java.time包阅读笔记
    CLion运行多个main函数
    c++中lower_bound和upper_bound中的comp参数
    如何写dfs
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3265446.html
Copyright © 2011-2022 走看看