| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 334 人关注过本帖
标题:c语言链表的创建出了问题
取消只看楼主 加入收藏
金帝
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-12-22
结帖率:0
收藏
已结贴  问题点数:10 回复次数:0 
c语言链表的创建出了问题
程序功能是 从已经创建好的一个文本文件里 (全数字 一行一个)  读取创建链表并排序。然后放到另外一个文件中  
这是我的写的程序但是不知道错在哪里了。想请大神们看下 。运行后没有程序结束的提示。应该是卡在创建链表时候的循环里了 所以想请大家看下。


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

//=======定义结构体====
typedef   struct  Node
{
    int   value;     //存放整数
    struct Node *pnext;  // 指向下一个节点的指针
}TagNode;


//================================
// 函数名: sort_list()
// 功能说明: 排序链表
// 参数:  TagNode*: 链表的头结点指针
// 返回值: void
//================================
void sort_list(TagNode*phead)
{
    TagNode *p2, *p1;
    int num;
    p2 = phead->pnext;
   

    // 检查链表是否为空
    if (p2 == NULL)
    {
        puts("链表为空!");
        return;
    }
    //// 选择排序
    while(p2->pnext != NULL)
    {
        p1 = p2->pnext;
        while(p1 != NULL)
        {
            if(p2->value > p1->value)
            {
                num = p2->value;
                p2->value = p1->value;
                p1->value = num;
            }
            p1 = p1->pnext;
        }
        p2 = p2->pnext;
    }
   
}


//================================
// 函数名: freeall()
// 功能说明: 排序链表
// 参数:  TagNode*: 链表的头结点指针
// 返回值: void
//================================
void freeall(TagNode*phead)
{
    TagNode*p1,*p2;
    p1=phead;
    while(p1!=NULL)
    {
        p2=p1;
        p1=p1->pnext;
        free(p2);
    }
}



//================================
// 函数名: display_list()
// 功能说明: 输出小孩链表
// 参数:  TagNode*: 链表的头结点指针
// 返回值: void
//================================
void display_list(TagNode*phead)
{
    TagNode* p;

    p = phead->pnext;  
   
    while(p != NULL)
    {
        printf("%4d", p->value);
        p = p->pnext;                            // p指向下一个结点
    }
    printf("\n");
}


int main()
{
    char ch,infile[40],outfile[40];
    FILE *in,*out;
    int num,c;
    TagNode* phead, *p1, *p2;
    printf("请输入想要打开的文件(即已编辑的整数文件):");
    scanf("%s",outfile);
    printf("请输入想要复制进的文件名:");
    scanf("%s",infile);
    out=fopen(outfile,"r");
    if(out==NULL)
    {
        printf("无法打开此文件");
        exit(0);
    }
    in=fopen(infile,"w");
    if(in==NULL)
    {
        printf("无法打开此文件");
        exit(0);
    }


    //创建链表

   

    // 分配头结点空间
    phead = (TagNode*)malloc(sizeof(TagNode));
    phead->pnext = NULL;
    p1= phead->pnext;
    p2 = phead;
    ch=fgetc(out);
    while(!feof(out));
    {
        putchar(ch);

        // 分配结点空间
        p1 = (TagNode*)malloc(sizeof(TagNode));
        p1->value = ch;
        p1->pnext = NULL;
        // 将p1结点加入到链表
        p2->pnext = p1;
        p2 = p1;
        // 输入下一个整数



        ch=fgetc(out);
    }
    display_list(phead);
    fclose(out);   //关闭输出文件
    //排序
    sort_list(phead);


    //写入
    p1=phead;
    p2=phead->pnext;
    ch=p2->value;
    while(p2!=NULL)
    {
        fputc(ch,in);
        p2=phead->pnext;
    }
    fclose(in);
    freeall(phead);
    return 0;
}
搜索更多相关主题的帖子: 文本文件 include 结构体 c语言 
2013-12-22 00:57
快速回复:c语言链表的创建出了问题
数据加载中...
 
   



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

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