最近在復習數據結構,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;
}
