1:**如下:
//view code//#include
"stdafx.h
"#include
#include
#include
using
namespace
std;
typedef
struct dbnode //
雙向鍊錶結構體
dbnode;
dbnode *createnode(int data)//
建立乙個節點,返回新建立的節點
dbnode *createlist(int head)//
建立乙個煉表頭,引數給出表頭節點資料,表頭節點不作為存放有意義資料的節點
/*插入新節點,總是在表尾插入;返回表頭節點
*/引數1是鍊錶的表頭節點,引數2是要插入的節點,其資料為data
/*---在雙向鍊錶尾部插入新節點的方法---
*/q->right =node;
node->left =q;
node->right =null;
/*---
*/return
head;
}void printlist(dbnode *head)//
列印整個鍊錶
pnode =head;
while (pnode !=null)
printf("\n
");}int getlength(dbnode *head)//
雙向鍊錶的測長,引數為煉表頭節點
pnode = head->right;
while (pnode !=null)
return
count;}/*
查詢節點,成功返回滿足條件的節點指標,否則返回null
*/dbnode *findnode(dbnode *head, int data)//
引數1是鍊錶的頭結點,引數2是要查詢的節點,其資料為data
/*找到資料或者到達鍊錶末尾,推出while迴圈
*/while (pnode->right != null && pnode->data !=data)
//沒有找到資料為data的節點,返回null
if (pnode->right ==null)
return
pnode;}/*
在node節點之後插入新節點
*/void insernode(dbnode *node, int
data)
if (node->right == null)//
node為最後乙個節點
else
//node為中間節點}/*
刪除滿足指定條件的節點,返回表頭節點,刪除失敗,返回null(失敗的原因是不存在該節點)
*/dbnode *deletenode(dbnode *head, int data)//
引數1是鍊錶的表頭節點,引數2是要插入的節點,其資料為data
else
if (pnode->left == null)//
node為第乙個節點
}else
if (pnode->right == null)//
node為最後乙個節點
else
free(pnode);//
釋放已被刪除的節點空間
return
head;
}int
main()
printlist(head);
cout
<< "
"<< findnode(head, 2) <
cout
<< "
資料為:
"<< findnode(head, 2)->data <
insernode(findnode(head,
2), 666
); cout
<< "
在資料為2的節點後插入666:
"<
printlist(head);
head = deletenode(head, 666
); cout
<< "
刪除666後:
"<
printlist(head);
return0;
}
執行結果:
資料結構 程式設計實現乙個雙向鍊錶的查詢
1 如下 include stdafx.h include include include using namespace std typedef struct dbnode 雙向鍊錶結構體 dbnode dbnode createnode int data 建立乙個節點,返回新建立的節點 dbno...
資料結構 程式設計實現乙個雙向鍊錶節點的插入
1 這裡分為兩種插入情況 一種是 插入位置在中間,另一種是插入位置在末尾。兩種情況有一點不同 插入位置在中間時需要把p的原後繼節點的前驅指標指向新插入的節點。include stdafx.h include include include using namespace std typedef st...
資料結構複習 之 乙個簡單雙向鍊錶的實現
1.什麼時候能默寫出來呢?include iostream using namespace std struct node class link void insertnode void insertnode node ptr void insertnodeathead node ptr void ...