| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 798 人关注过本帖
标题:双向链表的创建与顺,逆序的输出问题
只看楼主 加入收藏
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:1 
双向链表的创建与顺,逆序的输出问题
程序代码:
/*
程序名:双向链表的创建与输出
作者:Yucoat
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 20
#define MALLOCMEMORY (SqList *)malloc(sizeof(SqList))

typedef struct SqList SqList;
struct SqList
{
    char name[SIZE];
    SqList *last;
    SqList *next;
};

//初始化链表
SqList *InitSqList(SqList *h, SqList *t);
//输出链表
void ShowSqList(SqList *h);

int main()
{
    SqList *head = NULL, *tail = NULL;
    head = InitSqList(head, tail);

    ShowSqList(head);            //顺序输出链表
    ShowSqList(tail);            //逆序输出链表

    return 0;
}

SqList *InitSqList(SqList *h,SqList *t)
{
    SqList *p1 = NULL, *p2 = NULL;
    char temp[SIZE];

    p1 = p2 = MALLOCMEMORY;
    printf("请输入名字:");
    scanf("%s", p2->name);
    p2->last = NULL;
    p2->next = NULL;
    t = p2;                    //尾指针指向p2

    while (1)
    {
        if (h == NULL)         //如果链表为空,接表头
        {
            h = p2;
        }
        else                   //如果链表不为空,接表尾
        {
            t = p2;
        }
        printf("请输入名字:");
        scanf("%s", temp);

        if (temp[0] != '#')    //如果输入的字符串以#开头,结束
        {
            p2 = p1->next;
            p2 = MALLOCMEMORY;
            strcpy(p2->name, temp);
            p2->last = p1;
            p2->next = NULL;
            p1 = p1->next;
        }
        else
        {
            break;
        }

    }
    return h;
}

void ShowSqList(SqList *h)
{
    SqList *temp = h;
    while (temp->next != NULL)
    {
        printf("%s", temp->name);
        temp = temp->next;
    }
}



================================
错得很明显。,在执行的时候,输出到第三个名字的时候就出错了!
不知道怎么改,求高手给力!
2011-05-02 10:58
诸葛修勤
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:549
专家分:1955
注 册:2010-10-28
收藏
得分:20 
程序代码:
/*
程序名:双向链表的创建与输出
作者:Yucoat
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 20
#define MALLOCMEMORY (SqList *)malloc(sizeof(SqList))

typedef struct SqList SqList;
struct SqList
{
    char name[SIZE];
    SqList *last;
    SqList *next;
};

//初始化链表
SqList *InitSqList(SqList *h, SqList **t);
//输出链表
void ShowSqList(SqList *h);

int main(void)
{
    SqList *head = NULL, *tail = NULL;
    head = InitSqList(head, &tail);

    ShowSqList(head);            //顺序输出链表
    ShowSqList(tail);            //逆序输出链表

    return 0;
}

SqList *InitSqList(SqList *h,SqList **t)
{
    SqList *p1 = NULL, *p2 = NULL;
    char temp[SIZE];

    p2 = MALLOCMEMORY;
    printf("请输入名字:");
    scanf("%s", p2->name);
    p2->last = NULL;
    p2->next = NULL;
    *t = p2;                    //尾指针指向p2

    while (1)
    {
        if (h == NULL)         //如果链表为空,接表头
        {
            h = p2;
        }
        else                   //如果链表不为空,接表尾
        {
            *t = p2;
        }
        printf("请输入名字:");
        scanf("%s", temp);

        if (temp[0] != '#')    //如果输入的字符串以#开头,结束
        {
            //p2 = p1->next;
            p1 = MALLOCMEMORY;
            strcpy(p1->name, temp);
            p1->last = p2;
            p1->next = p2->next;
            p2->next = p1;

            p2 = p1;
        }
        else
        {
            break;
        }

    }
    return h;
}

void ShowSqList(SqList *h)
{
    SqList *temp = h;
    if (temp->next != NULL)
    {
        while (temp != NULL)
        {
            printf("%s\n", temp->name);
            temp = temp->next;
        }
    }
    else
    {
        while (temp != NULL)
        {
            printf("%s\n", temp->name);
            temp = temp->last;
        }
    }
}

2011-05-03 16:30
快速回复:双向链表的创建与顺,逆序的输出问题
数据加载中...
 
   



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

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