雙向鏈表
創建-打印-測長-查找-插入-刪除
#include <iostream>
using namespace std;
typedef struct DbNode
{
int data ;
struct DbNode *left;
struct DbNode *right;
}DbNode;
//根據數據創建節點
DbNode *Create(int data)
{
DbNode *pnode = NULL;
pnode = (DbNode *)malloc(sizeof(DbNode));
pnode->data = data;
//printf("%d\n",data);
pnode->left = pnode ->right = NULL ;
return pnode ;
}
//插入新節點,總是在表尾插入;返回表頭節點;
DbNode *AppendNode(DbNode *head ,int data)
{
DbNode *p = head, *q;
DbNode *pnode = Create(data);
while(p!= NULL)
{
q = p;
p = p->right;
}
q->right = pnode;
pnode->left = q;
return head ;
}
//實現雙向鏈表的測長
int Getlength(DbNode *head)
{
int count = 1;
DbNode *p = head, *q;
if(head==NULL)
{
return 0;
}
else
{
while(p!=NULL)
{
q = p->right;
if(q!=NULL)
{
count++;
}
p = p->right;
}
}
//printf("%d\n",count);
return count;
}
//雙向鏈表的打印
void Dbprint(DbNode *head)
{
DbNode *p = head;
int length = Getlength(head);
if(p!=NULL)
while(length>0)
{
printf("The list data :%d\n",p->data);
p = p->right;
--length;
}
}
//實現雙向鏈表節點的查找
DbNode *FindNode(DbNode *head,int data)
{
int length = Getlength(head);
DbNode *pnode = head;
if(pnode!=NULL)
{
while(length>0)
{
if(pnode->data == data)
{
printf("The List find node:%d\n",pnode->data);
return pnode;
}
else
{
pnode = pnode->right;
}
--length;
}
}
return NULL;
}
//雙向鏈表的插入
DbNode *InsertNode(DbNode *head,int data,int pos)
{
DbNode *pnode = Create(data), *p = head;
int length = Getlength(head);
if(p== NULL||length<=pos)
{
printf("The list NULL or Beyond\n");
return NULL;
}
while(pos>0&&length>pos)
{
p = p->right;
--pos;
}
if(p->right != NULL)
{
pnode->right= p->right;
pnode->left = p;
p->right = pnode;
}
else
{
pnode->right = NULL;
pnode->left = p;
p->right = pnode;
}
return head;
}
//雙向鏈表節點的刪除
DbNode *DeleteNode(DbNode* head ,int data)
{
DbNode *pnode = FindNode(head,data);
printf("the list delete node data:%d\n",data);
if(pnode!=NULL)
{
if(pnode->left == NULL)
{
head = pnode->right;
if(head!=NULL)
{
head->left = NULL;
}
}
else if(pnode->right ==NULL)
{
pnode->left->right = NULL;
}
else
{
pnode->left->right = pnode->right;
pnode->right->left = pnode->left;
}
}
free(pnode);
return head;
}
int main()
{
DbNode *head = Create(0);
for(int i = 1;i<10;i++)
{
head = AppendNode(head,i);
}
FindNode(head,3);
InsertNode(head,25,8);
head = DeleteNode(head,9);
Dbprint(head);
return 0;
}
The List find node:3
The List find node:9
the list delete node data:9
The list data :0
The list data :1
The list data :2
The list data :3
The list data :4
The list data :5
The list data :6
The list data :7
The list data :8