Mycr 发表于 2008-1-13 21:11

双向链表上的插入运算(这是我自已写的,但总觉得代码不是很简练,相请大家帮我看看)

双向链表上的插入运算,代码有点长,运行已通过,通过输入结点位置和插入元素的值,给已有的链表添加一个结点,但总觉得的代码有点长,不够简练,请大家帮我看看,可以怎么改更好,谢谢
#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]]


页: [1]

编程论坛