我最近在学习数据结构,自己写了一些初级的链表代码,方便链表的初学者。
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct DNode{
int data;
struct DNode *prior, *next;
}DNode, *DLinkList;
//尾插法建立双链表
DLinkList DLinkList_TailInsert(DLinkList &L){
cout << "以尾插法建立单链表,输入要添加的数字,以999结束:" << endl;
int num;
L = (DLinkList)malloc(sizeof(DNode));
DNode *s;
DNode *r = L;
cin >> num;
while(num != 999){
s = (DNode *)malloc(sizeof(DNode));
s->data = num;
s->prior = r;
r->next = s;
r = s;
cin >> num;
}
r->next = NULL;
return L;
}
//打印链表中的data
void DLinkList_Print(DLinkList L){
cout << "链表中的数据为:" << endl;
while(L->next != NULL){
cout << L->next->data << " ";
L = L->next;
}
cout << endl;
}
//按序号查找节点
DNode *GetElem(DLinkList L,int num){
int i = 0;
if(num == 0){
return L;
} else if(num < 0){
return NULL;
}
while(i < num && L->next){
L = L->next;
i++;
}
return L;
}
//向链表中插入元素
DLinkList DLinkList_Insert(DLinkList L, int num, int index){
DNode *p = GetElem(L, index-1);
DNode *s = (DNode *)malloc(sizeof(DNode));
s->data = num;
s->next = p->next;
p->next->prior = s;
p->next = s;
s->prior = p;
DLinkList_Print(L);
}
//删除节点
DLinkList DLinkList_Delete(DLinkList &L, int index){
DNode *p = GetElem(L, index-1);
DNode *t = p->next;
p->next=t->next;
p = p->next->prior;
free(t);
DLinkList_Print(L);
return L;
}
int main(){
int num;
int index;
DNode *p;
DLinkList L;
//尾插法建立双链表
DLinkList_TailInsert(L);
//打印链表中的data
DLinkList_Print(L);
//按序号查找节点
cout << "输入要查找节点的位置:" << endl;
cin >> num;
p = GetElem(L,num);
cout << "该元素的data为:" << p->data << "该元素的next为:" << p->next << endl;
//插入节点
cout << "输入要插入节点的值:" << endl;
cin >> num;
cout << "输入要插入节点的位置:" << endl;
cin >> index;
DLinkList_Insert(L, num, index);
//删除节点
cout << "输入要删除节点的位置:" << endl;
cin >> index;
DLinkList_Delete(L, index);
return 0;
}
如果我的代码对你有帮助,记得点赞+收藏哦!