日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/4/17 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 step3 . day2 数据结构之线性表链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天繼續學習數據結構的線性表部分,從基礎的順序表到鏈表,類比寫了一些調用函數,完成了表的增刪改查排序等問題。

尤其是鏈表的排序,費了很大的心思終于捋順寫出來了,小有成就感,而且代碼一次通過率越來越高,幾乎不用修改就能測試通過了,make傲嬌一小會。

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

//重定義數據類型名
typedef int datetype;

//鏈表結構體
typedef struct linklist{
datetype date;
struct linklist *next;
}linklist,*linklist_p;

//鏈表頭創建
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)); //數據出初始化
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;
}

//翻轉輸出
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為排序完成呆釋放數據元素
//temp為排序完成最小數據元素比較值指針

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

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

}

}

?

//刪除重復數據
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;
}

轉載于:https://www.cnblogs.com/huiji12321/p/11228894.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。