最近在复习数据结构,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;
}
原文:https://www.cnblogs.com/outxiao/p/11333292.html