数据结构中的双链表的实现
// 双链表.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);
}
以上代码实现了,双链表的操作