#include<stdio.h> #include<malloc.h> //双向链表的结构体 typedef struct DNode{ int data; struct DNode *prior; struct DNode *next; }DNode,*DLinkList; //双向链表的创建操作 void createList(DLinkList &L){ DLinkList s,p;//用来存放新的节点信息 L = (DLinkList)malloc(sizeof(DNode)); L->prior = NULL; L->next = NULL; p = L; int x;//用来接收新的值 scanf("%d",&x); while(x!=-1){ s = (DLinkList)malloc(sizeof(DNode)); s->data = x; p->next = s; s->prior = p; p = s; scanf("%d",&x); } p->next = NULL; } //查找元素(按序号查找) DLinkList findById(DLinkList L,int n) { int j = 1; DLinkList p = L->next; if(n==0){ return L; } while(p&&j<n){ p = p->next; j++; } return p; } //删除元素(按序号删除) void deleteList(DLinkList &L,int i){ DLinkList p = (DLinkList)malloc(sizeof(DNode)); DLinkList s; p = findById(L,i-1); s = p->next; p->next = s->next; s->next->prior = p; free(s); } //插入元素(按序号插入) void insertList(DLinkList &L,int i,int e){ DLinkList p = findById(L,i-1); DLinkList s = (DLinkList)malloc(sizeof(DNode)); s->data = e; s->next = p->next; s->prior = p; p->next =s; p->next->prior = s; } //显示链表中的元素 void show(DLinkList L){ DLinkList p = L->next; while(p){ printf("%d ",p->data); p = p->next; } } int main(){ DLinkList L,find; createList(L); // show(L); //测试查找方法 // find = findById(L,3); // printf("%d",find->data); // deleteList(L,3); // show(L); insertList(L,3,9999); show(L); return 0; }
数据结构-双向列表(增删改查)
猜你喜欢
转载自www.cnblogs.com/nnyst/p/11101956.html
今日推荐
周排行