| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 358 人关注过本帖
标题:不知为什么链表中不能插入数据,帮忙看一下
只看楼主 加入收藏
Y影子Z
Rank: 3Rank: 3
来 自:石家庄
等 级:论坛游侠
帖 子:54
专家分:110
注 册:2012-10-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
不知为什么链表中不能插入数据,帮忙看一下
#include<stdio.h>
#include<stdlib.h>
struct nodelink
{
    int data;
    struct nodelink* next;
};
typedef struct nodelink NodeLink;
typedef NodeLink* NodeLinkPtr;
void insertdata(NodeLinkPtr*,int);
void deletdata(NodeLinkPtr*,int);
void printdata(NodeLinkPtr);
int main(void)
{
    NodeLinkPtr startPtr=NULL;
    int select=0,value=0;
    printf("\n请输入需要的功能:\n"
             "\n1.插入数据\n"
             "\n2.删除数据\n"
             "\n3.打印链表\n");
    printf("\n?  ");
    while(scanf("%d",&select))
    {
        switch(select)
        {
        case 1:printf("\n请输入要插入的数据:  \n");
        lab1:if(scanf("%d",&value))
            {
                insertdata(&startPtr,value);
                break;
            }
            else
            {
                printf("\n输入错误\n");
                fflush(stdin);
                goto lab1;
            }
        case 2:printf("\n请输入要删除的数据\n");
        lab2:if(scanf("%d",&value))
            {
                deletdata(&startPtr,value);
                break;
            }
            else
            {
                printf("\n输入错误\n");
                fflush(stdin);
                goto lab2;
            }
        case 3:printf("\n打印链表数据:  \n");
            printdata(startPtr);
            break;
        default:printf("\n输入错误,请重新输入:\n");
        }
        printf("\n?  \n");
    }
    printf("\n程序结束\n");
    fflush(stdin);
    getchar();
    return 0;
}
void printdata(NodeLinkPtr startPtr)
{
    if(startPtr!=NULL)
    {
        while(startPtr!=NULL)
        {
            printf("%d",startPtr->data);
            startPtr=startPtr->next;
        }
    }
    else
    printf("\n链表为空\n");
}
void insertdata(NodeLinkPtr* startPtr,int value)
{
    NodeLinkPtr newPtr,previousPtr=NULL,currentPtr=*startPtr;
    newPtr=(struct nodelink*)malloc(sizeof(NodeLink));
    if(newPtr!=NULL)
    {
        newPtr->data=value;
        //newPtr->next=NULL;
        while(value>(currentPtr->data)&&currentPtr!=NULL)
        {
            previousPtr=currentPtr;
            currentPtr=currentPtr->next;
        }
        if(previousPtr!=NULL)
        {
            previousPtr->next=newPtr;
            newPtr->next=currentPtr;
        }
        else
        {
            newPtr->next=*startPtr;
            *startPtr=newPtr;
        }
    }
    else
        printf("\n没有足够的内存\n");
}
void deletdata(NodeLinkPtr* startPtr,int value)
{
    NodeLinkPtr currentPtr=*startPtr,previousPtr=NULL;
    if(currentPtr!=NULL)
    {
        while(value!=currentPtr->data)
        {
            previousPtr=currentPtr;
            currentPtr=currentPtr->next;
        }
        if(previousPtr!=NULL)
        {
            previousPtr->next=currentPtr->next;
            free(currentPtr);
        }
        else
        {
            *startPtr=currentPtr->next;
            free(currentPtr);
        }
    }
    else
        printf("\n链表为空\n");
}

插入数据函数insertdata(),一插入数据就提示内存不能为read,找了好久也没找到错
搜索更多相关主题的帖子: next void include 
2012-10-19 18:21
知不语
Rank: 2
等 级:论坛游民
帖 子:4
专家分:24
注 册:2012-10-19
收藏
得分:0 
问题出在你第一次调用插入函数之前startPtr没初始化。
第一次调用插入函数时 while(value>(currentPtr->data)&&currentPtr!=NULL)里的currentPtr也是NULL,当然是不可读的。
2012-10-19 19:26
知不语
Rank: 2
等 级:论坛游民
帖 子:4
专家分:24
注 册:2012-10-19
收藏
得分:20 
貌似说错了,程序没问题。
把插入函数里这句话 while(value>(currentPtr->data)&&currentPtr!=NULL)两个条件对换位置就行了。
即改成:while(currentPtr!=NULL&&value>(currentPtr->data))。
2012-10-19 19:40
知不语
Rank: 2
等 级:论坛游民
帖 子:4
专家分:24
注 册:2012-10-19
收藏
得分:0 
C语言这指向指针的指针实在是太闹心了,用引用会舒服点。
2012-10-19 19:45
Y影子Z
Rank: 3Rank: 3
来 自:石家庄
等 级:论坛游侠
帖 子:54
专家分:110
注 册:2012-10-12
收藏
得分:0 
回复 4楼 知不语
太棒了,问题解决了,原来就是一个判断顺序的问题,害苦了我了啊,谢谢兄弟!

有光明必然会有黑暗,而影子,就是光明与黑暗的缝隙
2012-10-20 19:30
快速回复:不知为什么链表中不能插入数据,帮忙看一下
数据加载中...
 
   



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

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