标题:有一个问题,不知道是软件的问题,还是语法的问题,有些代码总是运行不出来
只看楼主
wyh416
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-10-9
结帖率:33.33%
已结贴  问题点数:20 回复次数:4 
有一个问题,不知道是软件的问题,还是语法的问题,有些代码总是运行不出来
#include<stdio.h>
#include<stdlib.h>
typedef int ElmeType;
typedef struct node{
    ElmeType data;
    struct node *next;
}SLinkNode;
//链表的初始化
void InitList(SLinkNode *&L)
{   
    L=(SLinkNode*)malloc(sizeof(SLinkNode));
    L->data=NULL;
}
//在第i个位置上插入数值为x的元素
int InsElem(SLinkNode *&L, ElmeType x,int i)
{    int j=0;
    SLinkNode *p=L,*s;
    if(i<=0)return 0;
    if(p!=NULL&&j<i-1)
    {   
        j++;
        p=p->next;   
    }
    if(p==NULL)return 0;
    else{
    s=(SLinkNode*)malloc(sizeof(SLinkNode));
    s->data=x;
    s->next=p->next;
    p->next=s;
    return 1;
    }
}
//链表的输出
    void DispList(SLinkNode *L)
    {   
        SLinkNode *p=L->next;
            while(p!=NULL)
            {   
                printf("%d\t",p->data);
                p=p->next;
            }
            printf("\n");
    }
//单链表的销毁
    void DestryList(SLinkNode *L)
    {
        SLinkNode *p,*pre=L;
        p=pre->next;
        while(p!=NULL)
        {
            free(pre);
            pre=p;
            p=p->next;
        }
    free(pre);
   
    }
    //求单链表的长度
    int GetLength(SLinkNode *L)
    {
        int j=0;   
        SLinkNode *p;
        p=L->next;
        while(p!=NULL)
        {
        j++;
        p=p->next;
        }
    return j;
    }
    //求第i个元素
    int GetElem(SLinkNode *L,int i, ElmeType &e)
    {
        SLinkNode *p=L;
        int j=0;
        if(i<=0)return 0;
        while(p!=NULL&&j<i)
        {
            j++;
            p=p->next;   
        }
        if(p==NULL)return 0;
        else
        {
            e=p->data;
            return 1;
        
        }
   
    }
//以上是头文件的代码
#include"SLinkNode.h"
void main()
{
    SLinkNode *L;
    InitList(L);
    int i;
    int cd;
    ElmeType e;
    InsElem(L, 0,1);
    InsElem(L, 10,2);
    InsElem(L, 20,3);
    InsElem(L, 30,4);
    InsElem(L, 40,5);
    InsElem(L, 50,6);
    InsElem(L, 60,7);
    InsElem(L, 70,8);
    InsElem(L, 80,9);
    InsElem(L, 90,10);
    printf("线性表:");DispList(L);
    cd=GetLength(L);
    printf("输出此单链表的长度:%d\n",cd);
    i=3;
    GetElem(L,3, e);
    printf("第3个数:%d",e);
    DestryList(L);

}
//这里是主文件
线性表:0       90      80      70      60      50      40      30      20      10      Press any key to continue
//这是运行结果
我是用VC6做的。但是不知道怎么回事这个输出结果只有最上面显示输出元素的,之后的输出不知道为什么一直不显示
搜索更多相关主题的帖子: return data next NULL int 
2021-09-25 16:17
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:10 
try to use this:
online parser: https://www.bccn.net/run/(select g++)
I got the result what you want, and your code is okay to work

output sample:
线性表:0    90    80    70    60    50    40    30    20    10   
输出此单链表的长度:10
第3个数:80
2021-09-25 20:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你这段C++代码,第一个函数就是错的吧
void InitList(SLinkNode *&L)
{   
    L=(SLinkNode*)malloc(sizeof(SLinkNode));
    L->data=NULL;
}
难道不应该是
void InitList(SLinkNode*&L)
{   
    L=(SLinkNode*)malloc(sizeof(SLinkNode));
    L->data=0;
    L->next=NULL;
}
2021-09-26 07:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
我帮你用C语言(不是C++)重写了一个,没时间检查,因此仅供参考

程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef int SList_ElementType;

typedef struct SList_Node_ {
    SList_ElementType data;
    struct SList_Node_* next;
} SList_Node;

SList_Node* SList_Create( void )
{
    return NULL;
}
void SList_Destroy( SList_Node** pHead )
{
    for( SList_Node* p=*pHead; p; )
    {
        SList_Node* tmp = p;
        p = p->next;
        free( tmp );
    }
    *pHead = NULL;
}
void SList_Insert( SList_Node** pHead, size_t pos, SList_ElementType e )
{
    SList_Node** pp = pHead;
    for( size_t i=0; *pp && i!=pos; pp=&(*pp)->next,++i );

    SList_Node* tmp = (SList_Node*)malloc( sizeof(SList_Node) );
    tmp->data = e;

    tmp->next = (*pp);
    (*pp) = tmp;
}
size_t SList_Size( SList_Node** pHead )
{
    size_t size = 0;
    for( SList_Node* p=*pHead; p; p=p->next )
        ++size;
    return size;
}
SList_ElementType SList_at( SList_Node** pHead, size_t pos )
{
    SList_Node** pp = pHead;
    for( size_t i=0; *pp && i!=pos; pp=&(*pp)->next,++i );

    return *pp ? (*pp)->data : 0;
}
void SList_Display( SList_Node** pHead, FILE* fp, const char* format, const char* begin_s, const char* interval_s, const char* end_s )
{
    fprintf( fp, "%s", begin_s );
    for( SList_Node* p=*pHead; p; p=p->next )
    {
        if( p != *pHead )
            fprintf( fp, "%s", interval_s );
        fprintf( fp, format, p->data );
    }
    fprintf( fp, "%s", end_s );
}

int main( void )
{
    SList_Node* head = SList_Create();

    printf( "%zu ", SList_Size(&head) ); // 应该输出 0
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出一个空行

    SList_Insert( &head, -1, 100 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 1
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 100

    SList_Insert( &head, -1, 101 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 2
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 100, 101

    SList_Insert( &head, 0, 102 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 3
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 102, 100, 101

    SList_Insert( &head, 1, 103 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 4
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 102, 103, 100, 101

    SList_Insert( &head, 3, 104 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 5
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 102, 103, 100, 104, 101

    SList_Insert( &head, 5, 105 );
    printf( "%zu ", SList_Size(&head) ); // 应该输出 6
    SList_Display( &head, stdout, "%d", "{ ", ", ", " }\n" ); // 应该输出 102, 103, 100, 104, 101, 105

    size_t length = SList_Size( &head );
    for( size_t i=0; i!=length; ++i )
        printf( "%d%c", SList_at(&head,i), "\t\n"[i+1==length] ); // 应该输出 102 103 100 104 101 105

    SList_Destroy( &head );
}


输出
0 {  }
1 { 100 }
2 { 100, 101 }
3 { 102, 100, 101 }
4 { 102, 103, 100, 101 }
5 { 102, 103, 100, 104, 101 }
6 { 102, 103, 100, 104, 101, 105 }
102     103     100     104     101     105
2021-09-26 09:15
wyh416
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-10-9
得分:0 
回复 4楼 rjsp
谢谢谢谢,感觉自己还差好多
2021-09-26 11:44
wyh416
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-10-9
得分:0 
回复 3楼 rjsp
我这边估计是代码写的有错误,刚才把那个初始化的改了,发现有些变好了
2021-09-26 11:45



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




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

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