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("新節點分配失敗,程序終止! \n");
	    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("新節點分配失敗,程序終止! \n");
	    exit(-1);
	}
	pNew->Element=val;
	pNew->Next = NULL;
	(*tail)->Next = pNew; 
	*tail = pNew;
	
}

void Showlist(List pHead){
	
	printf("%p\n",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("\n向鏈表添加數據時間為%f秒!\n",totaltime);	

	start=clock();

    
    
    for(i = 0;i<100000;i++ ){
		AddItemInTail(10000000,&tail);
	}
    //Showlist(L);
    finish=clock();
    totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
    printf("\n輸出數據時間為%f秒!\n",totaltime);	
    
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM