/*双链表
求表长,按位查找,按值查找,遍历等与单链表类似
*/
//存储结构定义
typedef int DataType;
typedef struct DulNode
{
DataType data; //data为数据域
struct DulNode *prior,*next; //prior为前驱指针域,next为后继指针域
}DulNode,*first; //first为双链表头指针
//插入操作
void Insert(DulNode *first,int i,DataType x)
{
p = first;count = 0; //工作指针p指向头结点
while(p != NULL && count < i-1)
{
p = p->next;
count++;
}
if(p == NULL)
{
printf("位置");exit(-1);
}else{
s = (DulNode *)malloc(sizeof(DulNode));
s->data = x; //申请结点s,其数据域为x
s->prior = p; //将结点s插入结点p后
s->next = p->next;
p->next->prior = s;
p->next = s;
}
}
//删除操作
DataType Delete(Node *first,int i)
{
p = first;count = 0; //工作指针p指向头结点
while(p != NULL && count < i)
{
p = p->next;
count++;
}
if(p == NULL)
{
printf("位置");exit(-1);
}else{
q = p->next;x = q->data; //暂存被删结点
(p->prior)->next = p->next; //摘链
(p->next)->prior = p->prior;
free(q);
return x;
}
}
求表长,按位查找,按值查找,遍历等与单链表类似
*/
//存储结构定义
typedef int DataType;
typedef struct DulNode
{
DataType data; //data为数据域
struct DulNode *prior,*next; //prior为前驱指针域,next为后继指针域
}DulNode,*first; //first为双链表头指针
//插入操作
void Insert(DulNode *first,int i,DataType x)
{
p = first;count = 0; //工作指针p指向头结点
while(p != NULL && count < i-1)
{
p = p->next;
count++;
}
if(p == NULL)
{
printf("位置");exit(-1);
}else{
s = (DulNode *)malloc(sizeof(DulNode));
s->data = x; //申请结点s,其数据域为x
s->prior = p; //将结点s插入结点p后
s->next = p->next;
p->next->prior = s;
p->next = s;
}
}
//删除操作
DataType Delete(Node *first,int i)
{
p = first;count = 0; //工作指针p指向头结点
while(p != NULL && count < i)
{
p = p->next;
count++;
}
if(p == NULL)
{
printf("位置");exit(-1);
}else{
q = p->next;x = q->data; //暂存被删结点
(p->prior)->next = p->next; //摘链
(p->next)->prior = p->prior;
free(q);
return x;
}
}