标题:数据结构链表 取结点数据值出了点小问题
只看楼主
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
结帖率:0
已结贴  问题点数:20 回复次数:14 
数据结构链表 取结点数据值出了点小问题
程序代码:
/*链表: 建立单链表,顺序输入5个数,然后在第3个结点前面插入一个结点,接着
删除第3个结点,并显示表中所有结点数据值,给定1-5中的任意整数i,给出链表
中第i个结点的数据值。*/

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;

//链表的类型定义
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

//链表的初始化函数定义
Status InitList(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)exit(OVERFLOW);
    L->next=NULL;
    return OK; 
}

//链表的建立函数定义
void CreateList(LinkList &L,int n)
{
    //逆序输入n个元素的值,建立带表头结点的线性链表
    int i; LinkList p;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL; //建立头结点
    printf("输入数据: ");
    for(i=n;i>0;--i)
    {
        p=(LinkList)malloc(sizeof(LNode)); //生成新结点
        scanf("%d",&p->data);
        p->next=L->next;  L->next=p; //插入到表头
    }
}

//链表的插入函数定义
Status ListInsert(LinkList &L,int i,ElemType e)
{
    //在带头结点的线性链表L中第i元素结点之前插入元素e

    LinkList p,s; int j=0;
    p=L;
    while(p&&j<i-1) //寻找第i个元素前面一个结点
    {
        p=p->next;    //p指向第1个元素结点时,j=1....p指向第i-1个元素结点时,j=i-1,不再执行
        ++j; //j用于计数
    }
    if(!p||j>i-1) //i小于1或者大于表长
        return ERROR;
    s=(LinkList)malloc(sizeof(LNode)); //分配新结点
    s->data=e;
    s->next=p->next;  p->next=s; //在第i-1个结点和第i个结点之间插入
    return OK;
}

//链表的删除函数定义
Status ListDelete(LinkList &L,int i,ElemType &e)
{
    //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
    LinkList p,q; int j=0;
    p=L;
    while(p->next&&j<i-1)//寻找第i个元素前面一个结点,用p指向该结点
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return ERROR;
    q=p->next;  p->next=q->next;//p指向第i-1个元素,q指向第i个元素,然后将第i个和第i+1个元素连接
    e=q->data;
    free(q);
    return OK;
}

//给定i值,获得链表中对应结点数据值的函数定义
Status GetElem(LinkList L,int i,ElemType &e)
{
    LinkList p;
    int j;
    p=L->next; j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p&&j>i)
        return ERROR;
    e=p->data;
    return OK;
}

//链表的销毁函数定义
Status Destroy(LinkList &L)
{
    LinkList p;
    while(L=!NULL)
    {
        p=L->next;
        free(L);     //从开头开始释放空间
        L=p;
    }
}

//链表各结点数据值打印输出函数定义
void print(LinkList &L)
{
    LinkList p;
    p=L->next;
    if(L!=NULL)
    {
        printf("打印输出: ");
        do{
            printf("%d ",p->data);
            p=p->next;
        }while(p!=NULL);
    }
}

void main()
{
    //变量定义
    LinkList L;
    ElemType e;
    int i;

    //链表初始化函数调用
    InitList(L);

    //链表建立函数调用
    CreateList(L,5);

    //链表各结点数据值打印输出函数调用
    print(L);


    //链表的插入函数调用,实现在第3个结点前面插入一个结点,结点数据值通过键盘输入
    printf("\n在第3个结点前面插入一个结点:");
    scanf("%d",&e);
    ListInsert(L,3,e);

    //链表各结点数据值打印输出函数调用
    print(L);


    //链表的删除函数调用,实现删除第3个结点,删除的结点数据值复制给变量e
    printf("\n删除第三个结点,");
    ListDelete(L,3,e);

    //链表各结点数据值打印输出函数调用
    print(L);

    //给定i值,获得链表中对应结点数据值的函数调用
    printf("\n取第i个结点的数据值: ");
    scanf("%d",&i);
    GetElem(L,i,e);
    printf("Data值为: %d\n",e);

    //链表的销毁函数调用
    Destroy(L);
}

搜索更多相关主题的帖子: 链表 点数 结点 next 函数 
2017-05-08 22:08
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
运行的时候输入取 i 结点的数据值,弹出了"Data值为 :3",然后就弹出了停止工作的窗口
2017-05-08 22:10
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:20 
你的编译器真NB,这么多错误,外加警告,竟然还能通过编译。

ceshi7.c:17:26: error: expected ';', ',' or ')' before '&' token
 Status InitList(LinkList &L)
                          ^
ceshi7.c:26:26: error: expected ';', ',' or ')' before '&' token
 void CreateList(LinkList &L,int n)
                          ^
ceshi7.c:42:28: error: expected ';', ',' or ')' before '&' token
 Status ListInsert(LinkList &L,int i,ElemType e)
                            ^
ceshi7.c:62:28: error: expected ';', ',' or ')' before '&' token
 Status ListDelete(LinkList &L,int i,ElemType &e)
                            ^
ceshi7.c:81:42: error: expected ';', ',' or ')' before '&' token
 Status GetElem(LinkList L,int i,ElemType &e)
                                          ^
ceshi7.c:98:25: error: expected ';', ',' or ')' before '&' token
 Status Destroy(LinkList &L)
                         ^
ceshi7.c:110:21: error: expected ';', ',' or ')' before '&' token
 void print(LinkList &L)
                     ^
ceshi7.c: In function 'main':
ceshi7.c:132:5: warning: implicit declaration of function 'InitList' [-Wimplicit-function-declaration]
     InitList(L);
     ^
ceshi7.c:135:5: warning: implicit declaration of function 'CreateList' [-Wimplicit-function-declaration]
     CreateList(L,5);
     ^
ceshi7.c:138:5: warning: implicit declaration of function 'print' [-Wimplicit-function-declaration]
     print(L);
     ^
ceshi7.c:144:5: warning: implicit declaration of function 'ListInsert' [-Wimplicit-function-declaration]
     ListInsert(L,3,e);
     ^
ceshi7.c:152:5: warning: implicit declaration of function 'ListDelete' [-Wimplicit-function-declaration]
     ListDelete(L,3,e);
     ^
ceshi7.c:160:5: warning: implicit declaration of function 'GetElem' [-Wimplicit-function-declaration]
     GetElem(L,i,e);
     ^
ceshi7.c:164:5: warning: implicit declaration of function 'Destroy' [-Wimplicit-function-declaration]
     Destroy(L);
     ^

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-08 22:13
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 3楼 renkejun1942
微软VC++6.0啊,我也不知道为什么到你这里会这样
2017-05-08 22:29
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
你这貌似不是C,是C++,需要我帮你把帖子转到C++版面么?
查询之后,我可以肯定,你这是C++。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-08 22:36
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 5楼 renkejun1942
啊啊???我们学C都是用这个编译的喔。如果是C++那就麻烦你了
2017-05-08 22:42
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 6楼 yuanpeng
你的函数参数的&号,是C++ 的语法,不是C的,C语言没有这种写法。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-08 22:44
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 7楼 renkejun1942
这个&好像是引用的意思
2017-05-08 22:45
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 8楼 yuanpeng
那是C++的语法,C语言是没有这种语法的。
我编译之后一堆的报错信息也就可以解释了。
C语言没有引用的概念。

要么是你们老师把C++当成了C语言教,当然我觉得这不太可能。
要么你肯定学错了东西,C++虽然宣传说是C的超集,但它和C是截然不同的两种语言。

[此贴子已经被作者于2017-5-8 22:50编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-08 22:48
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 9楼 renkejun1942
2017-05-08 22:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476823-1-1.html




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

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