无法输出是怎么回事?

Sasura_321 2017-12-08 08:27:11
//有一个顺序表L,假设元素类型ElemType为整数
//设计一个尽可能高级的算法,将所有奇数移到偶数的前面


#include <stdio.h>
#include<stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;

void InitList(SqList &L,int arr[]) //构造一个线性表
{
L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
int i = 0;
L.length = 0;
for (i = 0; i < 8; i++)
{
L.elem[i] = arr[i];
L.length++;
}
L.listsize = LIST_INIT_SIZE;//初始储存容量
}

void MoveList(SqList &L)
{
int i = 0;
int j = L.length-1;
int temp = 0;

while(i<j)
{
while(i<j && L.elem[i]%2 == 0)
i--;
while(j>i && L.elem[j]%2 == 1)
j++;
if (i < j)
{
temp = L.elem[i];
L.elem[i] = L.elem[j];
L.elem[j] = temp;
}
}
}

void DisList(SqList L) //输出
{
int i = 0;
for(i = 0;i<L.length;i++)
printf("%d", L.elem[i]);
printf("\n");

}
int main()
{
SqList L;
int arr[] = {1,2,3,4,5,6,7,8};
InitList(L,arr);
MoveList(L);
DisList(L);
return 0;
}
...全文
206 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<stdlib.h>

#define LIST_INIT_SIZE  100
#define LISTINCREMENT   10

typedef int  ElemType;
typedef  struct
{
    ElemType *elem;
    int length;
    int listsize;
}SqList;

void InitList(SqList &L,int arr[], int size)  //构造一个线性表
{
    int i = 0;
    L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    L.length = 0;
    for (i = 0; i < size; i++)
    {
        L.elem[i] = arr[i];
        L.length++;
    }
    L.listsize = LIST_INIT_SIZE;//初始储存容量
}

void MoveList(SqList &L)
{
    int i = 0;
    int j = L.length-1;
    int temp = 0;

    while(i<j)
    {
        while(i<j && L.elem[i]%2 == 0)
            i++;    /*从开头向后,需要i++*/
        while(j>i && L.elem[j]%2 == 1)
            j--;    /* 从末尾向前,需要j--*/
        if (i < j)
        {
            temp = L.elem[i];
            L.elem[i] = L.elem[j];
            L.elem[j] = temp;
        }
    }
}

void DisList(SqList L)  //输出
{
    int i = 0;
    for(i = 0;i<L.length;i++)
        printf("%d ", L.elem[i]);
    printf("\n");

}
int main()
{
    SqList L;
    int arr[] = {1,2,3,4,5,6,7,8};
    InitList(L,arr, 8);
    MoveList(L);
    DisList(L);
    return 0;
}
参考一下吧 主要问题是首尾增加的错误;详见代码的注释;
paschen 2017-12-10
  • 打赏
  • 举报
回复
建议单步跟踪程序运行,观察变量变化情况,分析原因
老马何以识途 2017-12-08
  • 打赏
  • 举报
回复
问题可能出在InitList上,参数应该是SqList *,而调用处应该是SqList(&L, arr),这样才能给main函数的L初始化正确的值。
于2024年4月-2025年9月期间,研究团队在贵州习水国家级自然保护区制定39条样线,涵盖灌木林、常绿阔叶林、针叶林、常绿落叶阔叶混交林、针阔混交林等不同植被类型,每条样线分春夏秋冬4个季节采集样品,用真菌采集软件记录经纬度、海拔、采集地点、时间、生境等信息,使用佳能相机(R6 mark Ⅱ)对大型真菌进行拍照,并采集标本,标本存放于贵州省生物研究所大型真菌标本馆(HGAMF)。 通过形态学初步鉴定,结合分子生物学最终鉴定,参考已]报道的中国毒蘑菇名录开展毒蘑菇的认定。 调查到保护区内有毒真菌7目25科64种,导致中毒的主要类型有急性肾衰竭型、神经精神型和胃肠炎型。最终形成贵州习水国家级自然保护区大型有毒真菌图片数据集,它由以下2个部分组成。 (1)附件1包含78张原始照片(.JPG),照片名字包括了大型有毒真菌的拉丁名和中文名,若无中文名的直接用拉丁名。 (2)附件2是一个压缩文件,包含了2张工作表,其中一张表是大型有毒真菌39条样线的信息,另一张表是大型有毒真菌的中毒类型。 照片采用佳能相机R6 mark Ⅱ拍摄,物种鉴定通过多种文献核实,并经两位以上专家鉴定确认。该数据集可为研究地及周边的普通人识别有毒大型真菌提供参考,通过及时的图片对比,能有效避免误采误食大型有毒真菌,同时为因误食大型真菌可能引发的身体损伤进行了总结,能为患者及时治疗提供参考。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧