首先声明,代码不短,但是问题很小,就其中的一个符号,大家也不需要全部看代码哈:
问题已经在代码旁注释出来了。
- C/C++ code
//算法功能:在双向链表的第i个位置处插入一个新的数据元素e
#include <stdio.h>
#include <malloc.h>
#define OK 1;
#define ERROR 0;
typedef int Status;
//定义双向链表数据存储结构
typedef struct DulNode
{
struct DulNode *prior;
int data;
struct DulNode *next;
}DulNode, *DuLinklist;
//打印双向链表元素
void print_Dulist(DuLinklist L)
{
DuLinklist p;
p = L->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("n");
}
//顺序输入数据元素,尾插法建立带头结点的双向链表
void creat_Dulist(DuLinklist &L) //这个地方的"&"是干嘛的,我感觉不需要啊。。是引用吗?
{
DuLinklist p, q;
L = (DulNode*) malloc (sizeof(DulNode)); //建立链表头结点
L->next = NULL;
printf("请输入链表元素,Ctrl+Z结束,建立带头结点的双向链表:n");
q = (DulNode*) malloc(sizeof(DulNode));
scanf("%d", &(q->data));
q->next = L->next;
L->next = q;
q->prior = L;
p = (DulNode*) malloc (sizeof(DulNode));
while((scanf("%d", &(p->data))) != EOF) //按CTrl+Z组合键结束输入
{
p->next = q->next;
q->next = p;
p->prior = q;
q = p;
p = (DulNode*) malloc (sizeof(DulNode));
}
}
//在双向链表中第i个结点之前插入新的元素e
Status ListInsert_DL(DuLinklist L, int i, int e)
{
int j = 0;
DulNode *s, *p;
p = L;
while(p && j < i-1) //查找
{
p = p->next;
j++;
}
if(!p || j >i-1)
return ERROR;
s = (DuLinklist) malloc (sizeof(DuLinklist)); //新建结点
if(s == NULL)
return ERROR;
s->data = e; //插入结点
s->next = p->next;
p->next->prior = s;
p->next = s;
s->prior = p;
return OK;
}
int main()
{
DuLinklist L;
int i, e;
creat_Dulist(L);
printf("建立的双向链表为:n");
print_Dulist(L);
printf("请输入要插入的元素的位置i: ");
scanf("%d", &i);
printf("请输入要加入的元素的值: ");
scanf("%d", &e);
ListInsert_DL(L, i, e);
printf("插入新元素的双向链表:n");
print_Dulist(L);
return 0;
}
void creat_Dulist(DuLinklist &L) //这个地方的"&"是干嘛的,我感觉不需要啊。。是引用吗?