#include#include#includetypedef int type;
typedef struct node
node;
//建立乙個頭節點並將其指標返回
node *node_init()
//列印乙個鍊錶
void node_display(node*head)
else
printf("\n");
}}//找到第n個節點並返回其指標,若n==0則返回頭節點指標
node* node_find(node*head,int n)
else if(n==0)
while(p&&inext;
i++;
}if(!p)printf("not\n");
return p;
}//在pos個節點的位置插入乙個值為num的節點
void node_insert(node*head,int pos,type num)
else
}//刪除第pos個節點
void node_dele(node*head,int pos)
else
}//刪除整個鍊錶並釋放記憶體
void node_destory(node*head)
}
//返回第i個節點的值
type node_get(node*head,int i)
return p->info;
}//返回值為x的節點的位置是第幾個節點
int node_get(node*head,type x)
if(p)return i;
else return -1;
}//返回值為x的節點的指標
node*node_find(node*head,type x)
if(p)
else
}//把p2鍊錶連線的p1後面
void node_cat(node*p1,node*p2)
p->next=p2->next;
free(p2);
}//把p2鍊錶插入到p1節點的第n個節點的位置
void node_insert(node*p1,int n,node*p2)
else
p->next=pre->next;
pre->next=p2->next;
free(p2);
}}//刪除p1,節點的從begin開始的n個節點
void node_del(node*p1,int begin,int n)
//返回節點的和
int node_sum(node*head)
return sum;
}//建立鍊錶,當輸入的值為負數結束
void node_create(node*head)
else
}}//計算鍊錶節點數
int node_count(node*head)
return i;
}//在值為y的節點前面插入x
void node_insert_xy(node *head,type x,type y)
if(pre&&pre->info==y)
else printf("error\n");
}//倒置鍊錶
void node_reverse(node*head)
head->next=pre;
}//將鍊錶的偶數部分保留,奇數部分賦給另外乙個鍊錶,並返回其頭指標
node *node_divide(node*head1)
else
p=pre;
pre=pre->next;
}p2->next=null;
p->next=null;
return head2;
}//刪除鍊錶中大約x不大於y的節點
void node_dele_xtoy(node*head,int x,int y)
else p=p->next;
pre=pmid;
}}
帶頭節點鍊錶總結
帶頭節點鍊錶的建立 初始化乙個頭結點 包含指向下乙個節點的point next 執行初始化前判斷這個鍊錶是否有效 if null head 主要部分 新增節點分兩種情況 新增的是第乙個節點,直接讓頭結點指向現節點即可 需在鍊錶末尾新增節點,這時tail的作用就顯現出來,tail是上次錄入節點後的末尾...
不帶頭節點鍊錶
在本人之前的博文 帶頭節點的鍊錶 宿舍管理系統 中,本人介紹了鍊錶的基本知識點。那麼,在本人資料結構與演算法的專欄的開始,本人就來介紹下不帶頭節點鍊錶 由於本人在講解帶頭節點鍊錶的時候就已經講解過了鍊錶基本的增 刪 改 查 操作,所以,本人在這裡就不對這些重複的知識點進行講解了。本人在本篇博文中主要...
帶頭節點鍊錶的遞迴演算法
include using namespace std typedef class student linklist,link void init link linklist l void input link linklist l,int e 尾插法建立鍊錶 void delete link li...