顺序链表,为什么运行不了怎么改


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

//线性表顺序实现
//初始化,查找,插入,删除,合并有序

#define true 1
#define false 0
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT=10


typedef int Status;
typedef int ElemType;


typedef struct SqList{

ElemType *elem;

int length;

int listsize;

}SqList;



SqList* initList(SqList *l){

l->elem=(ElemType*)malloc(LIST_INIT_SIZE *sizeof(ElemType));

l->length=0;

l->listsize=LIST_INIT_SIZE ;

return l;

}


Status insert(SqList* l,int index,int data){

    if(index<1||index>l->length+1){

        return false;
    }
    if(l->length>l->listsize){
        return false;
    }

    for(int j=l->length+1;j>index-1;j--){

        l->elem[j+1]=l->elem[j];

    }

    l->elem[index-1]=data;

     l->length++;

}







Status search(SqList* l,int index){

if(index<0||index>l->length){

    return false;

}
else{


    int local=l->elem[index];

    printf("%d",local);
}



}


Status delete(SqList* l,int index){

   if(index<1||index>l->length+1){

        return false;

     for(int j=index-1;j<l->length;j++){

        l->elem[j]=l->elem[j+1];

    }

    l->length--;


}


Status mix(SqList* a,SqList* b){

SqList* new=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

Status i=0;
Status j=0;
Status k=0;

Status m=a->length;
Status n=b->length;

while(a->elem[i]<m&&b->elem[j]<n){

    if(a->elem[i]<b->elem[j]){

        new->elem[k]=a->elem[i];

        k++;

        i++;
    }
    else{
        new->elem[k]=a->elem[j];

        k++;

        j++;

    }

}

if(a->elem[i]!=0){

     new->elem[k]=a->elem[i];

        k++;

        i++;
}
else if(a->elem[j]!=0){

       new->elem[k]=a->elem[j];

        k++;

        j++;

}

return true;

}




main(){

    SqList* arr= initList(arr);
   


    insert(arr,1,1);


   for(int i=0;i<arr->length;i++){

        printf("%d",arr->elem[i]);
    }

    return 0;

}

修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
//线性表顺序实现
//初始化,查找,插入,删除,合并有序
#define true 1
#define false 0
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10    //#define LISTINCREAMENT = 10  修改

typedef int Status;
typedef int ElemType;

typedef struct SqList {

    ElemType* elem;
    int length;
    int listsize;
}SqList;

SqList* initList(SqList* l) 
{
    l->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    l->length = 0;
    l->listsize = LIST_INIT_SIZE;
    return l;
}

Status insert(SqList* l, int index, int data) 
{
    if (index < 1 || index > l->length + 1) {
        return false;
    }
    if (l->length > l->listsize) {
        return false;
    }
    for (int j = l->length; j > index - 1; j--) {
    //for (int j = l->length + 1; j > index - 1; j--) {  修改

        l->elem[j] = l->elem[j - 1];  // l->elem[j + 1] = l->elem[j]; 修改
    }
    l->elem[index - 1] = data;
    l->length++;
}

Status search(SqList* l, int index) 
{
    if (index < 0 || index > l->length) {
        return false;
    }
    else {
        int local = l->elem[index];
        printf("%d", local);
    }
}

Status Delete(SqList* l, int index)  //Status delete(SqList* l, int index) 修改
{
    if (index < 1 || index > l->length + 1) {
        return false;
    }
    for (int j = index - 1; j < l->length; j++) {
        l->elem[j] = l->elem[j + 1];
    }
    l->length--;
}
Status mix(SqList* a, SqList* b)
{
    SqList* New = initList(New); // 修改
    //SqList* new = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));  修改
    Status i = 0;
    Status j = 0;
    Status k = 0;
    Status m = a->length;
    Status n = b->length;
    while (a->elem[i] < m && b->elem[j] < n) {
        if (a->elem[i] < b->elem[j]) {
            New->elem[k] = a->elem[i];  //new->elem[k] = a->elem[i]; 修改
            k++;
            i++;
        }
        else {
            New->elem[k] = a->elem[j]; //new->elem[k] = a->elem[j]; 修改
            k++;
            j++;
        }
    }
    if (a->elem[i] != 0) {
        New->elem[k] = a->elem[i];  //new->elem[k] = a->elem[i]; 修改
        k++;
        i++;
    }
    else if (a->elem[j] != 0) {
        New->elem[k] = a->elem[j]; //new->elem[k] = a->elem[j];  修改
        k++;
        j++;
    }
    return true;
}

int    main()
{

    SqList* arr = initList(arr);
    insert(arr, 1, 0);
    insert(arr, 2, 1);
    insert(arr, 3, 2);
    insert(arr, 4, 3);
    insert(arr, 5, 4);
    for (int i = 0; i < arr->length; i++) {
        printf("%d ", arr->elem[i]);
    }
    return 0;
}

Status delete(SqList *l, int index) 这个函数的if缺个}
代码问题多多

int main()
{
    SqList arr;
    initList(&arr);

    insert(&arr, 1, 1);

    for (int i = 0; i < arr.length; i++)
    {
        printf("%d ", arr.elem[i]);
    }

    return 0;
}

【以下回答由 GPT 生成】

这段代码存在几个问题:

  1. mix函数中,newList应该是一个指向SqList结构体的指针类型,而不是ElemType类型。所以应该将SqList*赋给newList

  2. mix函数中,需要对newList进行初始化操作,即调用initList函数对其进行初始化。

  3. mix函数中,在合并两个有序表的过程中,需要比较ab两个表中元素的大小,并将较小的元素插入到newList中,然后根据插入位置更新ij的值。

  4. mix函数中,合并完成后需要修改newListlength属性。

下面是修改后的代码:

Status mix(SqList* a, SqList* b) {
    SqList* newList = initList(newList);
    Status i = 0;
    Status j = 0;
    Status k = 0;
    Status m = a->length;
    Status n = b->length;

    // 合并两个有序表
    while (i < m && j < n) {
        if (a->elem[i] < b->elem[j]) {
            insert(newList, k+1, a->elem[i]);
            i++;
        } else {
            insert(newList, k+1, b->elem[j]);
            j++;
        }
        k++;
    }

    // 处理剩余未插入的元素
    while (i < m) {
        insert(newList, k+1, a->elem[i]);
        i++;
        k++;
    }
    while (j < n) {
        insert(newList, k+1, b->elem[j]);
        j++;
        k++;
    }

    newList->length = k;

    return true;
}

以上就是对代码进行的修改,修正了mix函数的错误,并添加了初始化和更新长度的操作。请注意,这只是对代码问题的修改,对于代码的功能逻辑是否正确还需要根据具体需求进行验证。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

main()
这返回值类型都没有的,怕不是 turbo c 时代的程序吧
你还是找一个 TC2.0 去运行你的程序。