1:這裡分為兩種插入情況:一種是 插入位置在中間,另一種是插入位置在末尾。兩種情況有一點不同:插入位置在中間時需要把p的原後繼節點的前驅指標指向新插入的節點。
//#include "stdafx.h"
#include#include #include using namespace std;
typedef struct dbnode //雙向鍊錶結構體
dbnode;
dbnode *createnode(int data)//建立乙個節點,返回新建立的節點
dbnode *createlist(int head)//建立乙個煉表頭,引數給出表頭節點資料,表頭節點不作為存放有意義資料的節點
/*插入新節點,總是在表尾插入;返回表頭節點*/
/*---在雙向鍊錶尾部插入新節點的方法---*/
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為中間節點
}int main()
printlist(head);
cout << "資料為:" << findnode(head, 2)->data << endl;
insernode(findnode(head, 2), 666);
cout << "在資料為2的節點後插入666:" << endl;
printlist(head);
return 0;}
view code
執行結果:
收藏
資料結構 程式設計實現乙個雙向鍊錶的查詢
1 如下 include stdafx.h include include include using namespace std typedef struct dbnode 雙向鍊錶結構體 dbnode dbnode createnode int data 建立乙個節點,返回新建立的節點 dbno...
資料結構 程式設計實現乙個雙向鍊錶節點的刪除
1 如下 include stdafx.h include include include using namespace std typedef struct dbnode 雙向鍊錶結構體 dbnode dbnode createnode int data 建立乙個節點,返回新建立的節點 dbno...
資料結構複習 之 乙個簡單雙向鍊錶的實現
1.什麼時候能默寫出來呢?include iostream using namespace std struct node class link void insertnode void insertnode node ptr void insertnodeathead node ptr void ...