| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1684 人关注过本帖
标题:帮我改改这个程序 运行出来(链表头插法)
只看楼主 加入收藏
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:7 
帮我改改这个程序 运行出来(链表头插法)
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node//atention the 'struct'
{
    ElemType data;
    struct Node* next;
}Node,*LinkList;
void GreateFormHead(LinkList L)//插法建立链表函数
{
    Node *s;//定义一个结点
    char c;
    int flag=1;
    L=(LinkList)malloc(sizeof(Node));//atention
    L->next=NULL;//头结点   这两句是初始化链表
    while(flag)
    {
        printf("输入字符:\n");
        c=getchar();
        if(c!='$')//atention  头插法核心步骤
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            s->next=L->next;
            L->next=s;
        }
        else
                flag=0;
    }
}
void printf(Node *L)//输出函数   *L是头结点
{
    Node *q;
    q=L->next;
    while(q!=NULL)
    {
        //putchar(L->data);//atention
        printf("%c",q->data);
        q=q->next;
    }
   
}
int main()
{
        LinkList L;   
    GreateFormHead(L);//调用时只用函数名
    printf(L);
    return 0;
     
}
搜索更多相关主题的帖子: Node data next 结点 printf 
2018-04-06 16:35
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:9 
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;

typedef struct Node //atention the 'struct'
{
    ElemType data;
    struct Node* next;
} Node,*LinkList;

LinkList GreateFormHead() //插法建立链表函数
{
    Node *h=NULL, *s;   //定义一个结点
    char c;
    while ((c=getchar()) != '$')
    {
        s = (Node*)malloc(sizeof(Node));
        s->data = c;
        s->next = h;
        h = s;
    }
    return h;
}

void print(Node *L)    //输出函数   *L是头结点
{
    for (; L; L=L->next)
        printf("%c ", L->data);
    printf("\n");
}

int main()
{
    LinkList L = GreateFormHead();//调用时只用函数名
    print(L);
    return 0;
}
2018-04-06 17:02
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 2楼 吹水佬
非常感谢 这种方法我懂了 但是你知道我原来错在哪里吗
2018-04-06 17:40
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 2楼 吹水佬
你的程序中for (; L; L=L->next)的循环条件是当L=NULL时就跳出吗?
2018-04-06 17:47
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:10 
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node//atention the 'struct'
{
    ElemType data;
    struct Node* next;
}Node, *LinkList;
LinkList GreateFormHead(LinkList L)//插法建立链表函数 //void类型改成LinkList类型,需要返回头节点
{
    Node *s;//定义一个结点
    char c;
    int flag = 1;
    L = (LinkList)malloc(sizeof(Node));//atention
    L->next = NULL;//头结点   这两句是初始化链表
    while (flag)
    {
        printf("输入字符:\n");
        c = getchar();
       getchar();
        if (c != '$')//atention  头插法核心步骤
        {
            s = (Node*)malloc(sizeof(Node));
            s->data = c;
            s->next = L->next;
            L->next = s;
        }
        else
            flag = 0;
   
    }
    return L;
}
void print(Node *L)//输出函数   *L是头结点   在C文件中这个printf函数重定义。改成print
{
    Node *q;
    q = L->next;
    while (q != NULL)
    {
        //putchar(L->data);//atention
        printf("%c", q->data);
        q = q->next;
    }

}
int main()
{
    LinkList L=NULL;
    L=GreateFormHead(L);//调用时只用函数名
    print(L);
    return 0;
}
编译器调试环境为VS2015。没有用VC调试。文件为.c。非.cpp

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2018-04-06 20:17
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 5楼 lanke711
c=getchar();后面的getchar();有什么用
傻傻的问一下为什么是逆序输出?
2018-04-06 22:59
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:1 
回复 6楼 堃周
因为你写的是带头结点的头插法。
不是带头结点的尾插法。
看图:
图片附件: 游客没有浏览图片的权限,请 登录注册

每一次录入的数据都插入第一个节点。之前插入的数据都会向后一个节点移动一位。
C=getchar()每次读取一个字符
getchar();这里用来获取一个'\n'的。不然可能下一个c=getchar()会读到\n

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2018-04-07 01:45
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 5楼 lanke711
非常感谢
2018-04-07 15:04
快速回复:帮我改改这个程序 运行出来(链表头插法)
数据加载中...
 
   



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

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