august 发表于 2007-7-1 21:30:33

还是请教一下链表

程序如下:(请问这样写算是双链吗?只列出部分) head的置空在main里进行

struct dlist
{
    int num;
    float score;
    struct dlist *left,*right;
}*head;
void new_record()                                 // 输入新数据
{
    struct dlist *p1,*newer;
    newer=(struct dlist *)malloc(sizeof(struct dlist));
    p1=head;
    if(head==NULL)
      head=newer;
    else
    {
      p1=head;
      while(p1->right!=NULL)
      {
            p1=p1->right;
      }
      p1->right=newer;
      

    }
    p1=newer;
    printf("请输入学号:");
      scanf("%d",&p1->num);
      printf("请输入成绩:");
      scanf("%f",&p1->score);
      p1->right=NULL;
}
void insert()                                 // 根据条件插入数据
{
    struct dlist *p1,*p2,*p3;
    p1=head;
    p2=(struct dlist *)malloc(sizeof(struct dlist));
    p2->left=p2->right=NULL;
      printf("请输入学号:");
      scanf("%d",&p2->num);
      printf("请输入成绩:");
      scanf("%f",&p2->score);
      if(head==NULL)
            head=p2;
      else
      {
            while(p2->num>p1->num&&p1->right!=NULL)
            {
                p3=p1;
                p1=p1->right;
            }
            if(p2->num<p1->num)
            {
                if(p1==head)
                {
                  head=p2;
                  p2->right=p1;
                  p1->left=p2;
                }
                else
                {
                  p2->right=p3->right;
                  p3->right->left=p2;
                  p2->left=p3;
                  p3->right=p2;
                }

            }
            else
            {
                p1->right=p2;
                p2->left=p1;
            }
      }
}
void del()                                                    //删除数据
{
    int a;
    struct dlist *p1,*p2,*p3;
    if(head==NULL)
      printf("信息表为空无法删除!\n");
    else
    {
      p1=head;
      printf("请输入你要删除的学号:");
      scanf("%d",&a);
      while(a!=p1->num &&p1->right!=NULL)
      {
            p3=p1;
            p1=p1->right;
      }
      if(a==p1->num)
      {
            if(p1==head)
            {
                p2=p1;
                head=p1->right;
            }
            if(p1->right!=NULL)
            {
                p2=p1;
                p3->right=p1->right;
                p1->right->left=p3;
            }
            else
            {
                p2=p1;
                p1->left=NULL;
            }
      }
      else
            printf("没找到!\n");
    }
    if(p2!=NULL)
      free(p2);
}
void display()                                 //    显示数据
{
    int i=0;
    struct dlist *p;
    if(head==NULL)
      printf("信息表为空!\n");
    else
    {
    p=head;
    do
    {
      i=0;
      printf("%d:%d的成绩为%f\n",i+1,p->num,p->score);
      i++;
      p=p->right;
    }while(p!=NULL);
    }
}

duzhi5368 发表于 2007-7-6 10:23:40

经鉴定.是双链.
P2,P3....OTL,能不能起个更适当的名字.P3就是一个临时存放结点,命名为pTmpNode,P2更是没有什么必要,完全可以去掉.用P1->left应该替代.
另外,Node中指针..left,right...汗.一般都是prior,next吧
不是我较汁,天下大事,必成于细.开始没有一个好的命名规范和好的编程风格习惯,对以后的影响是极大的...T.T换本书吧..

august 发表于 2007-7-8 10:32:36

引用第1楼duzhi5368于2007-07-06 10:23发表的:
经鉴定.是双链.
P2,P3....OTL,能不能起个更适当的名字.P3就是一个临时存放结点,命名为pTmpNode,P2更是没有什么必要,完全可以去掉.用P1->left应该替代.
另外,Node中指针..left,right...汗.一般都是prior,next吧
不是我较汁,天下大事,必成于细.开始没有一个好的命名规范和好的编程风格习惯,对以后的影响是极大的...T.T换本书吧..

august 发表于 2007-7-8 10:33:41

你说的那本书已经在网上订购了,还没到手

duzhi5368 发表于 2007-7-8 13:36:02

恩,多买点,以后找你借书去方面

shawind 发表于 2007-7-8 17:08:41

够用就行了。IT类书特贵,什么都买,要花去的铁能砸死人的。

ps.
借书去“方便”?
"方便","方便","方便"啊~

duzhi5368 发表于 2007-7-8 19:53:36

我讨厌“便”“便”……
页: [1]
查看完整版本: 还是请教一下链表