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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下c语言 双向链表

發(fā)布時間:2023/12/20 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下c语言 双向链表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C/C++ code

/*
sgx 2008-10-30 c語言 雙向鏈表
*/
#include
<stdio.h>
#include
<assert.h>
#include
<malloc.h>
#define TRUE 1;
#define FALSE 0;

typedef
int ELEMTYPE;

typedef
struct DoubleLinkNode
{
ELEMTYPE data;
struct DoubleLinkNode *last;
struct DoubleLinkNode *next;
}dLinkNode,
*dLinkList;

dLinkList CreateDLlist(
void);/*創(chuàng)建空鏈*/
int InitDLlist(dLinkList * dl);/*初始化鏈*/
int InsertLNode(dLinkNode *pNode,ELEMTYPE e);/*節(jié)點前插入節(jié)點,返回TRUE,FALSE*/
int InsertNNode(dLinkNode *pNode,ELEMTYPE e);/*在某節(jié)點后面插入節(jié)點,*/
int DeleteNode(dLinkNode *pNode);/*刪除節(jié)點,返回TRUE換或FALSE*/
void DestroyDLlist(dLinkList dl);/*銷毀鏈*/
void LNTravel(dLinkList dl);/*從前向后遍歷*/
void NLTravel(dLinkList dl);/*從后向前遍歷*/
int main()
{
dLinkList dl
=CreateDLlist();
if(InitDLlist(&dl))printf("Initial sucess!\n");
LNTravel(dl);
NLTravel(dl);
DestroyDLlist(dl);
return 0;
}
dLinkList CreateDLlist(
void)/*創(chuàng)建空鏈*/
{
dLinkList dl
=NULL;
return dl;
}
int InitDLlist(dLinkList *dl)/*初始化鏈*/
{
ELEMTYPE e;
char symbol;
dLinkNode
*pNode;
if(*dl!=NULL)
{printf(
"this LinkList has been Initialed.\n");return FALSE;}
printf(
"input data:");
scanf(
"%d",&e);
getchar();
/*獲取空格*/
*dl=(dLinkNode*)malloc(sizeof(dLinkNode));
if(dl==NULL){printf("assigned memory failed,end Initailization!\n");
return FALSE;}
(
*dl)->data=e;
(
*dl)->next=NULL;
(
*dl)->last=NULL;
pNode
=*dl;
printf(
"continue?y/n ");
scanf(
"%c",&symbol);
getchar();
while(symbol=='y' || symbol=='Y')
{
printf(
"input data:");
scanf(
"%d",&e);
getchar();
InsertNNode(pNode,e);
pNode
=pNode->next;
printf(
"continue?y/n ");
scanf(
"%c",&symbol);
getchar();
}
return TRUE;

}
int InsertLNode(dLinkNode *pNode,ELEMTYPE e)/*節(jié)點前面插入節(jié)點,返回TRUE,FALSE*/
{
dLinkNode
*newNode,*lastNode;
if(pNode==NULL)
{
printf(
"Node is NULL,canot operate!\n");
return FALSE;
}
newNode
= (dLinkNode*)malloc(sizeof(dLinkNode));
if(!newNode){printf("assigned memory failed!\n");return FALSE;}/*分配失敗*/
newNode
->data=e;/*插入數(shù)據(jù)*/
if(pNode->last==NULL)
{
newNode
->last=NULL;
}
else
{
lastNode
= pNode->last;
lastNode
->next = newNode;
newNode
->last = lastNode;

}
newNode
->next=pNode;
pNode
->last=newNode;
return TRUE;
}
int InsertNNode(dLinkNode *pNode,ELEMTYPE e)/*在某節(jié)點后面插入節(jié)點,*/
{
dLinkNode
*newNode,*nextNode;
if(pNode==NULL)
{
printf(
"Node is NULL,canot operate!\n");
return FALSE;
}
newNode
= (dLinkNode*)malloc(sizeof(dLinkNode));
if(!newNode){printf("assigned memory failed!\n");return FALSE;}/*分配失敗*/
newNode
->data = e;/*插入數(shù)據(jù)*/

if(pNode->next==NULL)
{
newNode
->next=NULL;
}
else
{
nextNode
=pNode->next;
newNode
->next = nextNode;
nextNode
->last=newNode;
}
pNode
->next=newNode;
newNode
->last=pNode;

return TRUE;
}
int DeleteNode(dLinkNode *pNode)/*刪除節(jié)點,返回FALSE或TRUE*/
{
ELEMTYPE e;
dLinkNode
*LastNode,*NextNode;
if(pNode==NULL){printf("Node is NULL,cannot operate it!\n");return FALSE;}
LastNode
=pNode->last;
NextNode
= pNode->next;
e
=pNode->data;
if(pNode->next ==NULL && NULL == pNode->last)
{
free(pNode);
printf(
"%d is deleted,this LinkList now is NULL!\n",e);
return TRUE;
}
else if(pNode->next == NULL)
{
LastNode
->next = NULL;
}
else if(pNode->last == NULL)
{
NextNode
->last=NULL;
}
else
{
LastNode
->next=NextNode;
NextNode
->last=LastNode;
}
free(pNode);
printf(
"%d is deleted.\n",e);
return TRUE;
}
void DestroyDLlist(dLinkList dl)/*銷毀鏈*/
{
dLinkNode
*pNode=dl;
dLinkNode
*temp;
if(pNode==NULL)
{printf(
"the LinkList has been already destroyed!\n");return;}
while(pNode->next != NULL)
{
temp
=pNode;
pNode
=temp->next;
DeleteNode(temp);
}
DeleteNode(pNode);
}
void LNTravel(dLinkList dl)/*從前向后遍歷*/
{
dLinkList pNode;
if(dl==NULL){printf("LinkList is NULL!\n");return;}
pNode
=dl;
printf(
"Travel this LinkList InOrder: ");
do
{
printf(
"%d\t",pNode->data);
pNode
=pNode->next;
}
while(pNode!=NULL);
printf(
"\n");
}
void NLTravel(dLinkList dl)/*從后向前遍歷*/
{ dLinkList pNode;
if(dl==NULL){printf("LinkList is NULL!\n");return;}
pNode
=dl;
printf(
"Travel this LinkList PostOrder: ");
while(pNode->next!=NULL)pNode=pNode->next;
do
{
printf(
"%d\t",pNode->data);
pNode
=pNode->last;
}
while(pNode!=NULL);
printf(
"\n");
}
摘自: http://topic.csdn.net/u/20081030/15/250b5b04-319b-45fe-a8a7-b079b6380743.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的linux下c语言 双向链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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