双向链表上的插入运算(这是我自已写的,但总觉得代码不是很简练,相请大家帮我看看)
双向链表上的插入运算,代码有点长,运行已通过,通过输入结点位置和插入元素的值,给已有的链表添加一个结点,但总觉得的代码有点长,不够简练,请大家帮我看看,可以怎么改更好,谢谢#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next,*prior;
}NODE;
NODE *create_circular()
{
NODE *head,*p,*q;
char ch;
int a;
head=(NODE *)malloc(sizeof(NODE));
q=head;
ch='*';
while(ch!='?')
{
scanf("%d",&a);
p=(NODE *)malloc(sizeof(NODE));
p->data=a;
q->next=p;
p->prior=q;
q=p;
ch=getchar();
// printf("%d,%c\n",a,ch);
}
p->next=NULL;
return head;
}
void insert(NODE *p,NODE *q,int x)
{
NODE *temp;
temp=(NODE *)malloc(sizeof(NODE));
temp->data=x;
temp->prior=p;
p->next=temp;
temp->next=q;
q->prior=temp;
}
void main()
{
NODE *a,*b,*c,*d;
int j=0; //统计双向链表中的结点数,存入j中
int i=0;//确定在链表的位置
int position,x;//position接收插入的位置,x接收插入元素的值。
a=create_circular();
b=a->next; //是从head后面那个结点开始存数据
while(b!=NULL)
{
printf("%3d",b->data);
b=b->next;
j=j++;//统计双向链表中的结点数,存入j中
}
printf("\n此双向链表的结点数为:%d\n",j);
do
{
printf("请(重新)输入插入结点的位置:");
scanf("%d",&position);
}while(position<0||position>j);
printf("\n请输入插入元素的值:");
scanf("%d",&x); //x接收插入元素的值。
//根据postition确定在双向链表中*c的位置
c=a;
position-=1;
while(i!=position)
{
c=c->next;
i++;
}
d=c->next;
insert(c,d,x);
a=a->next;
while(a!=NULL)
{
printf("%3d",a->data);
a=a->next;
}
printf("\n");
}
[[italic] 本帖最后由 Mycr 于 2008-1-13 21:12 编辑 [/italic]]