数据结构中的双链表的实现
// 双链表.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "malloc.h" #define maxSize 100 //双链表结构 typedef struct DLNode { int data; struct DLNode *prior; struct DLNode *next; }DLNode; //尾插法创建链表 void CreateDLNodeR(DLNode *&L,int a[],int n) { DLNode *p,*s; L=(DLNode*)malloc(sizeof(DLNode)); L->prior=NULL; L->next=NULL; p=L; for(int i=0;i<n;i++) { s=(DLNode*)malloc(sizeof(DLNode)); s->data=a[i]; p->next=s; s->prior=p; p=p->next;//p=s } p->next=NULL; } //头插法创建链表 void CreateDLNodeF(DLNode *&L,int a[],int n) { DLNode *p,*s; L=(DLNode*)malloc(sizeof(DLNode)); L->prior=NULL; L->next=NULL; for(int i=0;i<n;i++) { s=(DLNode*)malloc(sizeof(DLNode)); s->data=a[i]; s->prior=L; s->next=L->next; L->next=s; } } //插入节点 在locate位置 插入x void LNodeInsert(DLNode *&L,int locate,int x) { DLNode *p=L,*s; int j=0; while(p->next!=NULL&&j<locate-1) { p=p->next; j++; } s=(DLNode*)malloc(sizeof(DLNode)); s->data=x; s->next=p->next; s->prior=p; p->next=s; } void LNodeDel(DLNode *&L,int locate) { DLNode *p=L,*q; int j=0; while(p->next!=NULL&&j<locate-1) { p=p->next; j++; } q=p->next; p->next=q->next; free(q); } void show(DLNode *L) { DLNode *p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } } int _tmain(int argc, _TCHAR* argv[]) { DLNode *L; int a[]={0,1,2,3,4,5,6,7,8,9}; CreateDLNodeR(L,a,10); LNodeInsert(L,1,-1); LNodeInsert(L,1,-2); LNodeDel(L,1); LNodeInsert(L,10,-8); show(L); }
以上代码实现了,双链表的操作