C數(shù)據(jù)結(jié)構(gòu)之雙鏈表詳細(xì)示例分析
更新時(shí)間:2013年08月13日 09:30:35 作者:
以下是對(duì)c語言中的雙鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
復(fù)制代碼 代碼如下:
typedef struct node
{
struct node *prior;
struct node *next;
int num;
}NODE;
/*******雙向鏈表的初始化********/
NODE *Init_link(void)
{
int i;
NODE *phead,*pb,*pi;
phead = (NODE *)malloc(sizeof(NODE));
printf("please input num:\n");
scanf("%d",&(phead->num));
phead->prior = NULL;
phead->next = NULL;
pb = phead;
for(i=0; i<3; i++)
{
pi = (NODE *)malloc(sizeof(NODE));
printf("please input num:\n");
scanf("%d",&(pi->num));
pi->next = NULL;
pb->next = pi;
pi->prior = pb;
pb = pi;
}
return phead;
}
/******鏈表的輸出******/
void print_link(NODE *phead)
{
while(phead != NULL)
{
printf(" %d,",phead->num);
phead = phead->next;
}
printf("\n");
}
/******鏈表的逆序******/
NODE *reverse_link(NODE *phead)
{
NODE *pb,*pf,*temp;
pb = phead;
pf = pb->next;
while(pf != NULL)
{
temp = pf->next;
pf->next = pb;
pb->prior = pf;
pb = pf;
pf = temp;
}
// phead->prior = pf->prior;
phead->next = NULL;
phead = pb;
return phead;
}
/*****鏈表的排序*****/
NODE *Order_link(NODE *phead)
{
NODE *pb,*pf,*ptr,temp;
pb = phead;
while(pb->next != NULL)
{
pf = pb->next;
while(pf != NULL)
{
if(pb->num > pf->num)
{
temp = *pb;
*pb = *pf;
*pf = temp;
ptr = pb->next;
pb->next = pf->next;
pf->next = ptr;
ptr = pb->prior;
pb->prior = pf->prior;
pf->prior = ptr;
}
pf = pf->next;
}
pb = pb->next;
}
return phead;
}
/******鏈表的有序插入*****/
NODE *insert_link(NODE *phead,NODE *pi)
{
NODE *pb,*pf;
pb = phead;
if(pi == NULL)
return phead;
if(phead == NULL)
{
phead = pi;
pi->prior = NULL;
pi->next =NULL;
}
else
{
while( (pi->num > pb->num)&&(pb->next!=NULL))
{
pf = pb;
pb = pb->next;
}
if(pi->num <= pb->num)
{
if(pb == phead)
{
pi->next = phead;
pi->prior = NULL;
phead->prior = pi;
phead = pi;
}
else
{
pi->next = pb;
pb->prior = pi;
pi->prior = pf;
pf->next = pi;
}
}
else
{
pi->next = NULL;
pi->prior = pb;
pb->next = pi;
}
}
return phead;
}
/******鏈表的刪除*****/
NODE *delete_link(NODE *phead, NODE *pi)
{
NODE *pb,*pf;
pb = phead;
while(pb != NULL)
{
if(pb == pi)
{
if(pb == phead)
phead = phead->next;
else if(pb->next == NULL)
pf->next = NULL;
else
{
pf->next = pb->next;
//pb->next->prior = pf;
}
}
pf = pb;
pb = pb->next;
}
return phead;
}
/*******鏈表的釋放******/
void free_link(NODE *phead)
{
NODE *pb;
while(phead != NULL)
{
pb = phead->next;
free(phead);
phead = pb;
}
printf("released link success!\n");
}
/*******測(cè)試程序******/
int main(void)
{
NODE *phead,*pi;
phead = Init_link();
printf("init link:\n");
print_link(phead);
pi = (NODE *)malloc(sizeof(NODE));
printf("plaese input insert num:");
scanf("%d",&(pi->num));
phead = insert_link(phead,pi);
printf("after insert link:\n");
print_link(phead);
phead = Order_link(phead);
printf("after sort link:\n");
print_link(phead);
printf("after reverse link:\n");
phead = reverse_link(phead);
print_link(phead);
phead = delete_link(phead, pi);
printf("after delete link:\n");
print_link(phead);
free_link(phead);
return 0;
}
您可能感興趣的文章:
- C++ 雙鏈表的基本操作(詳解)
- C/C++ 雙鏈表之逆序的實(shí)例詳解
- 利用C++實(shí)現(xiàn)雙鏈表基本接口示例代碼
- C語言雙向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言實(shí)現(xiàn)雙向鏈表
- C語言之雙向鏈表詳解及實(shí)例代碼
- C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作
- C語言中雙向鏈表和雙向循環(huán)鏈表詳解
- C語言 數(shù)據(jù)結(jié)構(gòu)雙向鏈表簡(jiǎn)單實(shí)例
- C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和雙向鏈表操作
- C語言實(shí)現(xiàn)的雙鏈表功能完整示例
相關(guān)文章
Qt6.0+vs2019環(huán)境配置的實(shí)現(xiàn)教程
這篇文章主要介紹了Qt6.0+vs2019環(huán)境配置的實(shí)現(xiàn)教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03C語言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能(2)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能的第二部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02C++實(shí)現(xiàn)LeetCode(208.實(shí)現(xiàn)字典樹(前綴樹))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(208.實(shí)現(xiàn)字典樹(前綴樹)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C++?STL中五個(gè)常用算法使用教程及實(shí)例講解
本文主要介紹了C++?STL算法中常見的五個(gè)算法的使用教程并附上了案例詳解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11詳細(xì)分析C++ 數(shù)據(jù)封裝和數(shù)據(jù)抽象
這篇文章主要介紹了C++ 數(shù)據(jù)封裝和數(shù)據(jù)抽象的的相關(guān)資料,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06