匿名用户
1级
2008-08-09 回答
我做过的作业给你,可以直接运行
#include
#include
#define NULL 0
#define LEN sizeof(struct DuLNode)
typedef struct DuLNode{ int data;struct DuLNode* prior;struct DuLNode* next;}DuLNode,*DuLinkList;
void CreatList_L(DuLinkList &L,int n,DuLinkList &Tail)
{ DuLinkList p,q;int i;
L=(DuLinkList)malloc(LEN);
L->next=NULL;//建立一个空的头结点,但因为它有指针域,所以它!=NULL
p=L;
for(i=1;i<=n;++i)
{q=(DuLinkList)malloc(LEN);
printf("输入一个整数:");
scanf("%d",&q->data);
q->next=L;//创建一个新结点
p->next=q;
q->prior=p;
p=q;
printf("\n");
}
Tail=q;
}
//在第i个位置前插入一结点
void ListInsert_L(DuLinkList &L,int i,int e)
{
DuLinkList p,s;int j=0;
p=L->next;
while(p!=L&&jnext;++j;}//找到第i-1个结点
if(p==L||j>i-1) printf ("插入位置错误!");
s=(DuLinkList)malloc(LEN);
s->data=e;
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
}
//删除第i个结点,并用e 返回其值
void ListDelete_L(DuLinkList &L,int i,int &e)
{
DuLinkList p,q;int j=0;
p=L->next;
while(p!=L&&jnext;++j;}
if(p==L||j>i-1) printf("删除位置错误!");
q=p->next; //使q 指向被删除结点
q->next->prior=p;
p->next=q->next;
free(q);
}
//输出循环双链表
void DisplayList_L(DuLinkList L)
{ DuLinkList p;
p=L->next;//指向第一个节点
if(p==L) printf("List is empty!");
while(p!=L)
{printf("%d,",p->data);
p=p->next;}
printf("\n");
}
void main()
{
DuLinkList L2,Tail2;int n2;n2=4;int i=2;int e=8;
CreatList_L(L2,n2,Tail2);
ListInsert_L(L2,i,e);
DisplayList_L(L2);
printf("\n");
ListDelete_L(L2,i,e);
DisplayList_L(L2);
}