雙向鏈表-創建-打印-測長-查找-插入-刪除

雙向鏈表

創建-打印-測長-查找-插入-刪除

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章