zoukankan      html  css  js  c++  java
  • C语言实现链表

    最近在复习数据结构,C语言指针都忘光了....

    使用指针操作链表、添加数据真的快......Redis也是这样的吧!

    希望今年上岸吧! 剩下的一百多天加油鸭! Metropolitan

    爱小静!

    代码如下:

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    #include <time.h>
    #ifndef _CLOCK_T_DEFINED
    typedef long clock_t;
    #define _CLOCK_T_DEFINED
    #endif
    
    typedef int ElementType;        //    定义数据类型,可根据需要进行其他类型定义
    typedef struct ListNode {
        ElementType  Element;        //    数据域,存放数据
        struct ListNode* Next;        //    指向下一个链表节点
    }Node,*List;       //List   ~ Node *   
    void InitList(Node* *phead ){
    	
    	*phead = (Node *)malloc(sizeof(Node));
    
    	if(*phead == NULL){
    		printf("头节点分配失败!"); 
    		exit(-1); 
    	}
    
    	(*phead)->Next = NULL;
    }
    
    void AddItemInHead(List pHead,int val,Node * *tail){
    	
    	List pNew = (Node *)malloc(sizeof(Node)); //生成新节点
    	if(pNew == NULL){
    	    printf("新节点分配失败,程序终止! 
    ");
    	    exit(-1);
    	}
    	pNew->Element=val;
    	pNew->Next = NULL;
    	if(pHead->Next == NULL){
    		pHead->Next = pNew; 
    	}else{
    		(*tail)->Next = pNew; 
    	}
    	
    	*tail = pNew;
    	
    	
    }
    
    void AddItemInTail(int val,List *tail){
    	
    	List pNew = (Node *)malloc(sizeof(Node)); //生成新节点
    	if(pNew == NULL){
    	    printf("新节点分配失败,程序终止! 
    ");
    	    exit(-1);
    	}
    	pNew->Element=val;
    	pNew->Next = NULL;
    	(*tail)->Next = pNew; 
    	*tail = pNew;
    	
    }
    
    void Showlist(List pHead){
    	
    	printf("%p
    ",pHead);
      	pHead=pHead->Next; //跳过头结点输出
      	while(pHead!=NULL){
        printf("%d ",pHead->Element);
        pHead=pHead->Next;
      }
    }
    
    //    主函数 
    int main() {
        Node* L;
        Node * tail;
        
    	InitList(&L);       
    	
    	clock_t start,finish;
      	double totaltime;
        start=clock();
    
    	int i;
    	for(i = 0;i<100;i++ ){
    		AddItemInHead(L,i,&tail);
    	}
    	
    	AddItemInTail(100000,&tail);
    	
    	finish=clock();
        totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
        printf("
    向链表添加数据时间为%f秒!
    ",totaltime);	
    
    	start=clock();
    
        
        
        for(i = 0;i<100000;i++ ){
    		AddItemInTail(10000000,&tail);
    	}
        //Showlist(L);
        finish=clock();
        totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
        printf("
    输出数据时间为%f秒!
    ",totaltime);	
        
        return 0;
    }
    
  • 相关阅读:
    网页抓取
    基本数据结构
    小节
    顺序统计量
    线性时间排序
    快速排序
    堆排序 Heapsort
    大数运算
    趣味题,文本中洞的数量
    nginx config配置
  • 原文地址:https://www.cnblogs.com/outxiao/p/11333292.html
Copyright © 2011-2022 走看看