鱼C论坛

 找回密码
 立即注册
查看: 1348|回复: 4

建双向链表,请问为什么打印不出来

[复制链接]
发表于 2016-12-29 16:34:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

运行结果 一直是什么不能以read方式打开
源代码在附件里
我能怎么办
我也很绝望啊。。。
求大佬指点


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct person
{
        char name[10];
        int count;
        struct person *right;
        struct person *left;
       
};
//创建链表
struct person *creat()
{
    int n=0;
        struct person *p1,*p2,*head;
    p1=p2=(struct person*)malloc(sizeof(struct person));
    printf("Please input the  person\n");
    scanf("%s",&p1->name);
    p1->count=0;
    head=NULL;
   for(n=0;n<2;n++)
  {
   
        if(n==0)
        {
                head=p1;
         }
         else
         {
                 p2->right=p1;
                 p1->left=p2;
                
         }
         p2=p1;
         n++;
         p1=(struct person*)malloc(sizeof(struct person));
     printf("Please input the  person\n");
     scanf("%s",&p1->name);
     p1->count=0;
   
   }
        return head;
}
//打印链表
void print(struct person *head)
{
    struct person *p;
    p=head;
     if(head!=NULL)
          for (int i = 0; i<2; i++)

        {
                printf("%s %d\n", p->name, p->count);
                p = p->right;
        }
         
}

//

int main (void)
{
    struct person *candidate;

        char name[200]={0};
    candidate=creat();   
    print(candidate);
  
}


文档.txt

4.76 KB, 下载次数: 7

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-29 19:37:10 | 显示全部楼层
本帖最后由 代码农民 于 2016-12-29 21:46 编辑
//dblist.h
#ifndef _DB_LIST
#define _DB_LIST

struct Node; //不完整的声明,结构的定义在.c文件中
typedef struct Node* Head; //头结点的votes用来记人数
typedef struct Node* Person; //结点的votes用来记投票

#endif

Head Create( void );
Person AddVotes( char* PersonName, Head X );
void Print( Head X );
int PersonsNumbers( Head X);
//dblist.c
#include "dblist.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>




struct Node
{
    char     name[16];
    int      votes;
    Person   Ahead;
    Person   Next;
};



Head
Create( )
{
    Head  p;

    p = malloc( sizeof( struct Node ) );
    if( P == NULL )
        {
            printf( "Head创建时内存不足\n" );
            exit( 1 );
        }
    strcpy( p->name, "a" );
    p->votes = 0;
    p-> Ahead = Next = NULL;
    return p;
}






Head  //如果表里有这个人就为这个人的票数加1,没有的话就插入一个结点,插入后整个表是排序好了的
AddVotes( char* PersonName, Head X )
{
    Person  p1, p2, p3;
    int a;
    
    p2 = X->Next;
    p3 = X;
    while( p2 != NULL )
    {   
        a = strcmp( PersonName, p2->name );
        if( a == 0 )
        {  
             ++p2->votes;
             return X;
        }
        else
        if( a > 0 )
        {
            p3 = p2;
            p2 = p2->Next;
        }
        else
            break;
    }
    
    p1 = malloc( sizeof( struct Node ) );
        if( p1 == NULL )
            {
                printf( "Person创建时内存不足\n" );
                exit( 1 );
            }
        strcpy( p1->name, PersonName );
        p1->votes = 1; //因为这个不存在的人被投了一票
        ++X->votes;    //表中人数加1


    p1->Ahead = p3;
    p1->Next  = p2;
    p3->Next = p1;
    if( p2 != NULL )
        p2->Ahead = p1;
    
    
    return X;
}


void
Print( Head X )
{
    Person p;

    for( p = X->Next; p != NULL; p = p->Next )
        printf( "%16s:%d\n", p->name, p->votes );
}


int   //表中的人数
PersonsNumbers( Head X )
{
        return X->votes;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-3 19:34:02 | 显示全部楼层
楼主,你head=p1;的时候,当时p1这个结构体的上下级指针是空的,之后你再没有对这个head重写过,所以你在打印的时候,只能打印出一个,第二个完全找不到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-4 00:47:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-4 00:47:38 | 显示全部楼层
cb7960588 发表于 2017-1-3 19:34
楼主,你head=p1;的时候,当时p1这个结构体的上下级指针是空的,之后你再没有对这个head重写过,所以你在打 ...

懂了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表