数据结构-双向链表-基础

张开发
2026/4/13 2:38:28 15 分钟阅读

分享文章

数据结构-双向链表-基础
#include iostream #include stdio.h #includestdlib.h //双向链表存储结构 typedef int ElemType; typedef struct node { ElemType data; struct node* prev, * next; }Node; //初始化 Node* initList() { Node* head (Node*)malloc(sizeof(Node)); head-data 0; head-prev NULL; head-next NULL; return head; } //遍历 void listNode(Node* L) { Node* p L-next; while (p ! NULL) { printf(%d\n, p-data); p p-next; } } //头插法(头节点是L要插入的节点是p。L,p,L-next int insertHead(Node* L, ElemType e) { Node* p (Node*)malloc(sizeof(Node)); p-data e; p-prev L; p-next L-next; if(L-next!NULL) { L-next-prev p; } L-next p; return 1; } //尾插法最后一个节点是tail要插入的节点是p //先遍历找到tail再插入p Node* get_tail(Node* L) { Node* p L; while (p-next ! NULL) { p p-next; } return p; } Node* insertTail(Node* tail, ElemType e) { Node* p (Node*)malloc(sizeof(Node)); p-data e; p-prev tail; tail-next p; p-next NULL; return p; } //在指定位置插入数据 //指定位置为pos //通过while循环让p是插入位置的前边的节点pos-1的位置) //插入q。p,q,p-next int insertNode(Node* L, int pos,ElemType e) { Node* p L; int i 0; while (i pos - 1) { p p-next; i; if (p NULL) { return 0; } } Node* q (Node*)malloc(sizeof(Node)); q-data e; q-prev p; q-next p-next; p-next-prev q; p-next q; return 1; } //删除节点(要删除q其前一个节点是p) int deleteNode(Node* L, int pos) { Node* p L; int i 0; while (ipos - 1) { p p-next; i; if (p NULL) { return 0; } } if (p-next NULL) { printf(要删除的位置错误\n); return 0; } Node* q p-next; p-next q-next; q-next-prev p; free(q); return 1; } //主函数 int main() { Node* list initList(); insertHead(list, 10); insertHead(list, 20); Node* tail; tail get_tail(list); insertTail(tail, 30); tail get_tail(list); insertTail(tail, 40); insertNode(list, 3, 25); deleteNode(list, 4); listNode(list); }

更多文章