标题:建立一个链表,同时声明一个函数,可是在main()函数中调用生命的函数后无法 ...
只看楼主
kunkun1314
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-12-15
结帖率:33.33%
已结贴  问题点数:9 回复次数:5 
建立一个链表,同时声明一个函数,可是在main()函数中调用生命的函数后无法执行下一步操作
#include <stdio.h>
#include <stdlib.h>

#define LEN sizeof(struct LNode)
int num;
int j;
struct LNode
{
    int data;
    struct LNode *next;

};
int n;
struct LNode *creat_lnode(int n)
{
    struct LNode *L;
    struct LNode *p;
    struct LNode *r;
    int j;

    L=malloc(LEN);  //L是个头节点
    L->next=NULL;
    r=L;
    printf("请输入链表元素\n");
    for(j=0;j<n;j++)
    {

        p=malloc(LEN);
        scanf("%d",&(p->data));
        p->next=NULL;
        r->next=p;
        r=p;
    }
    L=L->next;
    return (L);
}
int flag=0;
void find_lnode(struct LNode *L,int i)
{
    int m;
    for(m=0;m<j;m++,L=L->next)
    {
        if(L->data==i)
        {
            printf("%d的位置是",i);
            printf("%d\n",m);
            flag=5;
        }
    }
    if(flag==0)
        printf("没有这个元素");
}
struct LNode *pre_insert_lnode(struct LNode *L,int i,int DATA)
{
    struct LNode *pt_1;
    struct LNode *pt_2;
    struct LNode *pt_3;
    int m;
    pt_2=L;
    pt_3=pt_2;
    for(m=0;m<i-1;m++)
    {
        L=L->next;
    }
        pt_1=malloc(LEN);
        pt_1->data=DATA;
        pt_1->next=L->next;
        L->next=pt_1;
    for(m=0;m<100;m++,pt_2=pt_2->next)
    {
        printf("%d ",pt_2->data);
    }
    return pt_3;
}
void delete_lnode(struct LNode *P,int i)
{
    struct LNode *pt_1;
    struct LNode *pt_2;
    struct LNode *first;
    first=P;
    int m;
    for(m=0;m<i-1;m++)
    {
        P=P->next;
    }
    pt_1=P->next;
    pt_2=pt_1->next;
    P->next=pt_2;
    free(pt_1);
    for(m=0;m<100;m++,first++)
    {
        printf("%d\n",first->data);
    }
}
int main()
{
    struct LNode *L;
    struct LNode *M;
    struct LNode *h;
    int i;
    int insert_num;
    int insert_data;
    int del_area;
    printf("请输入链表元素个数\n");
    scanf("%d",&num);
    L=creat_lnode(num);
    M=L;
    for(i=0;i<num;i++,L=L->next)
    {
        printf("%d\n",L->data);
    }
    printf("%d\n",M);
    printf("请输入要查找的数据\n");
    scanf("%d",&j);
    find_lnode(M,j);
    printf("请输入要插入的位置\n");
    scanf("%d",&insert_num);
    printf("请输入要插入的数据\n");
    scanf("%d",&insert_data);
    h=pre_insert_lnode(M,insert_num,insert_data);
/***********************************************************************/
    就是在这,调用了pre_insert_lnode()函数向链表中插入一个数据后,就无法执行下一步的操作
/***********************************************************************/
    printf("请输入要删除元素的位置\n");
    scanf("%d",&del_area);
    delete_lnode(M,del_area);
    return 0;
}

搜索更多相关主题的帖子: 函数 struct int next printf 
2019-04-02 19:25
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
得分:9 
 for(m=0;m<100;m++,pt_2=pt_2->next)
    {
        printf("%d ",pt_2->data);
    }


这里可能会有错误

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-04-03 09:11
kunkun1314
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-12-15
得分:0 
回复 2楼 ZJYTY
老哥,你觉得是那个地方不对啊,我刚刚也在看这个地方,就是有种感觉他不对,但是编译的时候到此为止是正确的啊
2019-04-03 10:17
kunkun1314
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-12-15
得分:0 
回复 2楼 ZJYTY
我又尝试了一下,如果没有这个for循环,是可以完成的,程序确实就是卡在这个for循环这,可是我改了一下m的范围也不行,这应该是那一块的问题啊??
2019-04-03 10:32
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
得分:0 
回复 4楼 kunkun1314
以判断链表是否结束为循环条件试试

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-04-03 10:40
kunkun1314
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-12-15
得分:0 
回复 2楼 ZJYTY
老哥,我找到问题了,我这是写了一个死循环啊,我现在明白了
2019-04-03 10:41



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




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

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