鍊錶的各種操作的實現和改進

2021-07-02 11:51:25 字數 3025 閱讀 3429

**鍊錶這東西,搞了老子很久的時間,不過貌似有點懂了,分享一下我的**

**用c實現( ⊙ o ⊙ )

…………恩,我是分割線(^__^)………………

一.不帶頭指標的鍊錶的各種操作

1.用雙向鍊錶搞定的o( ̄▽ ̄)d**

#include

#include

typedef struct _nodenode;

typedef struct _listlist;

//這裡定義了2個結構體,其中的乙個的作用是用來修改指標的值的

//指標的指標可以用來修改函式體的指標,或者用另乙個指標

void add(list *plist,int number);

void delet(list *plist,int number);

void print(list list);

int main(int argc,char const *argv)while(number!=-1);/*這裡用do比較好,while的話,一開始的number要初始化,比如為0*/

print(list);

scanf("%d",&number);

delet(&list,number);

print(list);

return0;}

void add(list *plist,int number)

else

}void delet(list *plist,int number)

if(p==plist->head)

if(p==plist->tail)

free(p);

break;

}}*/

for(q=null,p=plist->head;p;q=p,p=p->next)

else

free(p);

break;

} }}

void print(list list)

printf("\n");

}

**…………請叫我分割線o(∩_∩)o哈哈~………………

2.補充一種寫法:這種寫法和頭指標差別感覺不是很大**

#include 

#include

typedef struct _node

node,*linklist;

void add(linklist l,int number);

void print(linklist l);

void find(linklist l,int number);

void delete_one(linklist l,int number);

void delete_all(linklist l);

int main(int argc,char const *argv)

}print(l);

scanf("%d",&number);

//find(l,number);

delete_one(l,number);

print(l);

//delete_all(l);

return0;}

void add(linklist l,int number)

last->next=p;

//free(last);

}else

}void print(linklist l)

printf("\n");

}void find(linklist l,int number)

}if(!isfound)

}void delete_one(linklist l,int number)

else

free(p);

break;}}

}void delete_all(linklist l)

}

**…………分割線…………

二:用頭指標的方法來實現鍊錶的各種操作

優點:簡化**,比如add和del各種操作的時候簡化**,至於缺點,筆者目前沒發現,下面是****

#include

#include

typedef struct _nodenode;

typedef struct _listlist;

//這裡的話,定義了2個結構體

void add(list *plist,int number);

void print(list *plist);

void find (list*plist,int number);

void del(list *plist,int number);

void clear(list *plist);

int main(int argc,int const *argv)

}while(number!=-1);

print(&mylist);

scanf("%d",&number);

// find(&mylist,number);

del(&mylist,number);

print(&mylist);

clear(&mylist);

//print(&mylist);

return0;}

void add(list *plist,int number)

last->next=p;

}void print(list *plist)

printf("\n");

}void find(list *plist,int number)

}if(!isfound)

printf("not find!\n");

}void del(list *plist,int number)

}}void clear(list *plist)

}

最後說一句,頭指標加上雙向鍊錶的,有興趣的自己去寫

typedef struct _listlist;

這個裡面加乙個node *tail的事情了。

鍊錶的各種操作

鍊錶的各種操作 typedef struct lnode lnode linklist 建立乙個鏈式表 向表中加入資料 status listset linklist head p2 next null return ok 返回鏈式表的長度 int listlength linklist head ...

鍊錶的各種操作

鍊錶的基本操作都寫在下面了 具體內容寫在 注釋中了 include include include include using namespace std struct listnode 增,傳進來要增加尾的鍊錶的表頭 可利用這個函式來建立鍊錶 void create listnode head,i...

鍊錶的各種操作

include include typedef struct node node typedef struct lists void add lists list,int num 建立新鍊錶 void print lists list 輸出鍊錶 void frees lists list 清除鍊錶 ...