标题:数据结构链表 取结点数据值出了点小问题
取消只看楼主
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
结帖率:0
已结贴  问题点数:20 回复次数:7 
数据结构链表 取结点数据值出了点小问题
程序代码:
/*链表: 建立单链表,顺序输入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
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 3楼 renkejun1942
微软VC++6.0啊,我也不知道为什么到你这里会这样
2017-05-08 22:29
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 5楼 renkejun1942
啊啊???我们学C都是用这个编译的喔。如果是C++那就麻烦你了
2017-05-08 22:42
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 7楼 renkejun1942
这个&好像是引用的意思
2017-05-08 22:45
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 9楼 renkejun1942
2017-05-08 22:54
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 11楼 renkejun1942
我也没质疑你,我也是挺疑惑的,如有冒犯对不起啊
2017-05-08 23:15
yuanpeng
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2017-5-8
得分:0 
回复 13楼 renkejun1942
学校说是学C,结果被你这么一说才知道是C++,那么我应该去学C还是C++呀,有没有什么好的建议
2017-05-08 23:31



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




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

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