日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

step3 . day2 数据结构之线性表链表

發(fā)布時(shí)間:2024/4/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 step3 . day2 数据结构之线性表链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天繼續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的線性表部分,從基礎(chǔ)的順序表到鏈表,類比寫(xiě)了一些調(diào)用函數(shù),完成了表的增刪改查排序等問(wèn)題。

尤其是鏈表的排序,費(fèi)了很大的心思終于捋順寫(xiě)出來(lái)了,小有成就感,而且代碼一次通過(guò)率越來(lái)越高,幾乎不用修改就能測(cè)試通過(guò)了,make傲嬌一小會(huì)。

#include <stdio.h>
#include <stdlib.h>

//重定義數(shù)據(jù)類型名
typedef int datetype;

//鏈表結(jié)構(gòu)體
typedef struct linklist{
datetype date;
struct linklist *next;
}linklist,*linklist_p;

//鏈表頭創(chuàng)建
linklist_p linklist_creat(){

linklist_p head = NULL;
head = (linklist_p)malloc(sizeof(linklist)); //分配空間
if(!head){
printf("malloc failed\n");
return NULL;
}

// memset(&(head->date),0,sizeof(datetype)); //數(shù)據(jù)出初始化
head->next = NULL;

return head;
}

//頭部插入
void linklist_head_insert(linklist_p head,datetype value){
linklist_p temp = NULL;
temp = linklist_creat();
temp->date = value;

temp->next = head->next;
head->next = temp;
}


//遍歷鏈表
void linklist_show(linklist_p head){

while(head->next != NULL){
printf("%d ",head->next->date);
head = head->next;
}
puts("");
}

//尾部插入
void linklist_tail_insert(linklist_p head,datetype value){
linklist_p temp = NULL;
temp = linklist_creat();
temp->date = value;

temp->next = NULL;
while(head->next !=NULL){
head = head->next;
}
head->next = temp;
}


//按照位置插入
void linklist_pos_insert(linklist_p head,int pos,datetype value){
linklist_p temp = NULL;
temp = linklist_creat();
temp->date = value;

int i = 1;
while(head->next !=NULL && i < pos){
head = head->next;
i++;
}
if(i == pos){
temp->next = head->next;
head->next = temp;
}
else
printf("position illegal\n");
}

//查找
int linklist_search(linklist_p head,datetype value){
int pos = 1;
while(head->next != NULL){
if(head->next->date == value){
return pos;
}
pos++;
head = head->next;
}
return -1;
}
//按值修改
void linklist_value_update(linklist_p head,datetype old,datetype new){

while(head->next != NULL){
if(head->next->date == old){
head->next->date = new;
}
head = head->next;
}
}

//按位置修改
void linklist_pos_update(linklist_p head,int pos,datetype value){

int i=1;
while(head->next != NULL && i<pos){
head = head->next;
i++;
}
if(i == pos && head->next !=NULL){
head->next->date = value;
}
else{
printf("can not find\n");
}
}

//判斷是否為空表
int linklist_is_empty(linklist_p head){

return head->next == NULL? 1 : 0;
}


//頭部刪除
datetype linklist_head_del(linklist_p head){
if(linklist_is_empty(head)){
printf("linklist is empty\n");
return -1;
}
int value = head->next->date;
linklist_p temp = head->next;
head->next = head->next->next;
free(temp);
temp =NULL;
return value;

}

//尾部刪除
datetype linklist_tail_del(linklist_p head){

while(head->next->next != NULL){
head = head->next;
}
int value =head->next->date;
linklist_p temp = head->next;
head->next = NULL;
free(temp);
temp = NULL;
return value;
}

//翻轉(zhuǎn)輸出
void linklist_reversal(linklist_p head){
linklist_p p,q;
p = head->next;
head->next =NULL;
while(p != NULL){
q = p;
p = p->next;
q->next = head->next;
head->next = q;
}
}

//鏈表清空
void linklist_clear(linklist_p head){
linklist_p p,q;
p = head->next;
head->next =NULL;
while(p != NULL){
q = p;
p = p->next;
free(q);
q=NULL;
}
}

//排序
void linklist_sort(linklist_p head){
linklist_p p,q,temp;
//p為拆分后待排序鏈表頭指針
//q為排序完成呆釋放數(shù)據(jù)元素
//temp為排序完成最小數(shù)據(jù)元素比較值指針

p = head->next->next;
head->next->next = NULL; //拆分鏈表
while(p != NULL){
int pos = 1; //初始插入點(diǎn)
linklist_p temp = head; //定位排序ok初始鏈表
while(temp->next !=NULL){ //尋找插入點(diǎn)
if(p->date < temp->next->date){
linklist_pos_insert(head,pos,p->date);
q = p;
p = p->next;
free(q);
q = NULL;
break;
}
else{//第一位未找到插入,位置后移,對(duì)比值后移
pos++;
temp = temp->next;
}
}

if(temp->next == NULL){ //值大于所以已排序好鏈表數(shù)據(jù)元素
linklist_tail_insert(head,p->date);
q = p;
p = p->next;
free(q);
q = NULL;
}

}

}

?

//刪除重復(fù)數(shù)據(jù)
void linklist_repeat_del(linklist_p head){
linklist_p itemp = head->next;
linklist_p jtemp = itemp->next;
linklist_p p = NULL;

while(jtemp){
if(jtemp->date == itemp->date){
itemp->next = jtemp->next;
p = jtemp;
free(p);
p =NULL;
jtemp = jtemp->next;
continue;
}
itemp = itemp->next;
jtemp = itemp->next;

}

}


//按照順序插入
int main(int argc, const char *argv[])
{
linklist_p list = linklist_creat();

linklist_head_insert(list,4);
linklist_head_insert(list,100);
linklist_head_insert(list,1);
linklist_head_insert(list,2);
linklist_head_insert(list,3);
linklist_head_insert(list,7);
linklist_head_insert(list,7);
linklist_head_insert(list,7);
linklist_head_insert(list,7);
linklist_head_insert(list,7);
linklist_head_insert(list,5);
linklist_head_insert(list,9);
linklist_head_insert(list,100);
linklist_head_insert(list,8);
linklist_head_insert(list,100);
linklist_head_insert(list,6);

// linklist_show(list);

// linklist_tail_insert(list,9);
// linklist_show(list);

// linklist_pos_insert(list,11,100);
// linklist_show(list);


// printf("pos = %d\n",linklist_search(list,8));

// linklist_value_update(list,7,111);
// linklist_show(list);

// linklist_pos_update(list,13,11);
// linklist_show(list);

// printf("%d\n",linklist_head_del(list));
// linklist_show(list);

// printf("%d\n",linklist_tail_del(list));
// linklist_show(list);


linklist_reversal(list);
linklist_show(list);

// linklist_clear(list);
// linklist_show(list);
linklist_sort(list);
linklist_show(list);

linklist_repeat_del(list);
linklist_show(list);
return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/huiji12321/p/11228894.html

總結(jié)

以上是生活随笔為你收集整理的step3 . day2 数据结构之线性表链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。