标题:双向链表上的插入运算(这是我自已写的,但总觉得代码不是很简练,相请大家帮 ...
只看楼主
Mycr
Rank: 1
等 级:新手上路
帖 子:203
专家分:0
注 册:2006-9-18
 问题点数:0 回复次数:0 
双向链表上的插入运算(这是我自已写的,但总觉得代码不是很简练,相请大家帮我看看)
双向链表上的插入运算,代码有点长,运行已通过,通过输入结点位置和插入元素的值,给已有的链表添加一个结点,但总觉得的代码有点长,不够简练,请大家帮我看看,可以怎么改更好,谢谢
#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]]
搜索更多相关主题的帖子: 链表 NODE 简练 代码 运算 
2008-01-13 21:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-197362-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.631874 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved