最近在复习数据结构,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; }