| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:新建链表的问题
取消只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
已结贴  问题点数:20 回复次数:1 
新建链表的问题
// page271.cpp : Defines the entry point for the console application.
//
//链表的建立
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
struct link *appendnode(struct link *head);
void displink(struct link *head);
void deletememory(struct link *head);
struct link
{
    int data;
    struct link *next;
};
int main(int argc, char* argv[])
{
    int i=0;
    char c;
    struct link *head=NULL;//指向链表头
    printf("Do you want to append a new node(Y/N)?");
    scanf(" %c", &c);//%c前有一个空格
    while(c=='Y' || c=='y')
    {
        head = appendnode(head);
        displink(head);//显示当前链表中的各节点信息
        printf("Do you want to append a new node(Y/N)?");
        scanf(" %c", &c);//%c前有一个空格
        i++;
    }
    printf("%d new nodes have been apended!\n", i);
    deletememory(head);//释放所有已分配的内存
    return 0;
}
//函数功能:新建一个节点,并讲该节点添加到链表的末尾,返回添加节点后的链表的头节点指针
struct link *appendnode(struct link *head)
{
    struct link *p=NULL;
    struct link *pr=head;
    int data;
    p=(struct link *)malloc(sizeof(struct link));//为新节点申请内存
    if(p==NULL)//若申请内存失败,则输出错误信息,退出程序
    {
        printf("No enough memory!\n");
        exit(0);
    }
    if(head==NULL)//若原链表为空链表,则将新建节点添加到表尾
    {
        head=p;
    }
    else//若原链表为非空,则将新建节点添加到表尾
    {//若未到表尾,则继续移动指针pr,直到pr指向表尾
        while(pr->next != NULL)
        {
            pr=pr->next ;
        }
        pr->next=p;//将新建节点添加到链表的末尾
    }
    pr=p;//让pr指向新建节点
    printf("Input node data:");
    scanf("%d", &data);//输入节点数据
    pr->data=data;
    pr->next=NULL;//将新建节点位置为表尾
    return head;//返回添加节点后的链表的头节点指针
}
//函数功能:显示所有已建好的节点的节点号和该节点中数据项内容
void displink(struct link *head)
{
    struct link *p = head;
    int j=1;
    while (p != NULL)//若不是表尾,则循环输出
    {
        printf("%5d%10d\n", j, p->data);//输出第j个节点的数据
        p=p->next;//让p指向下一个节点
        j++;
    }
}
//函数功能:释放head指向的链表中所有节点占用的内存
void detelememory(struct link *head)
{
    struct link *p=head, *pr=NULL;//若不是表尾,则释放节点占用的内存
    while(p != NULL)
    {
        pr=p; //若不是表尾,则释放节点占用的内存
        p=p->next;//让p指向下一个节点
        free(pr);//释放pr指向的当前节点占用的内存
    }
}
//问题:编译时没错误,但运行就错误了!什么错误?怎么修改?什么思想?
搜索更多相关主题的帖子: head void include 新建 
2012-12-28 19:05
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
收藏
得分:0 
回复 3楼 天剑杀手
非常感谢,我找了两个晚上都找不到错误!一下子给你解决了!

新手发言,请多指教!
2012-12-28 22:52
快速回复:新建链表的问题
数据加载中...
 
   



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

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