苦学中 发表于 2020-11-23 18:34:27

顺序表

请问可以帮我看看哪里写的不对吗?
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef double ElementType;
typedef struct sqlist{
        ElementType data;
        int length;
}Sqlist;

void CreatList(Sqlist *L){
        L=(Sqlist*)malloc(sizeof(Sqlist));
    L->length=0;
        int i;
        double data={1,2,3,4,5};
        for(i=0;i<5;i++){
      L->data=data;
      L->length=L->length+1;
        }
}

ElementType GetElement(Sqlist *L,int i)
{
        return L->data;
}

void TraverseList(Sqlist *L){
        int j;
        for (j=0;j<L->length;j++){
    printf("\n");
        printf("%.1f",L->data);
        }
}

void SearchList(Sqlist *L,ElementType x){
        int i=0;
        for(i=0;i<L->length;i++){
        if(L->data==x){
                printf("the position is %d\n",i);
                break;
        }
        }
        if(i==L->length)
                printf("not be found\n");
}
int InsertList(Sqlist *L,int i,ElementType x){
        int k;
        if(L->length==MAXSIZE)
                return 0;
        if(i<1||i>L->length-1)
                return 0;
        if(i<=L->length-1){
                for (k=L->length;k>i;k--)
                        L->data=L->data;
        }
        L->data=x;
        L->length++;
        return 1;
}
int DeleteList(Sqlist *L,int i){
        int k=0;
        if(L->length==0)
                return 0;
        if(i<0||i>L->length-1)
                return 0;
        if(i<L->length){
                for(k=i;k<L->length;k++)
                        L->data=L->data;
        }
        L->length--;

        return 1;
}
int main(){
    Sqlist L;
        CreatList(&L);
        TraverseList(&L);
        GetElement(&L,1);
        SearchList(&L,3);
        InsertList(&L,2,10);
        TraverseList(&L);
        DeleteList(&L,4);
        TraverseList(&L);
        return 0;
}

jackz007 发表于 2020-11-23 19:05:06

      你发现什么问题或什么地方不对?

苦学中 发表于 2020-11-23 19:08:52

就是输出结果全为零

苦学中 发表于 2020-11-23 19:09:29

jackz007 发表于 2020-11-23 19:05
你发现什么问题或什么地方不对?

没有输出想输出的数组

jackz007 发表于 2020-11-23 19:31:41

苦学中 发表于 2020-11-23 19:09
没有输出想输出的数组

      你的输入是什么,期望得到的输出应该是什么?

乙冗 发表于 2020-12-4 18:57:50

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef double ElementType;
typedef struct sqlist
{
    ElementType data;
    int length;
}Sqlist;

void CreatList(Sqlist* L)
{   
    int i;
    double data = { 1,2,3,4,5 };
    /*这一步不用,这申请空间的是链表才用,顺序表在定义的时候就分配好了一段空间*/
/*L = (Sqlist*)malloc(sizeof(Sqlist));*/
    L->length = 0;
    for (i = 0; i < 5; i++)
    {
      L->data = data;
      L->length++;//可直接++
    }
}

ElementType GetElement(Sqlist* L, int i)
{
    return L->data;
}

void TraverseList(Sqlist* L)
{
    int j;
    for (j = 0; j < L->length; j++) {
      printf("%.1lf ", L->data);//这样更清晰一些
    }
    printf("\n");
}

void SearchList(Sqlist* L, ElementType x)
{
    int i = 0;
    for (i = 0; i < L->length; i++)
      if (L->data == x)
      {
            printf("the position is %d\n", i);
            break;
      }
    if (i<0||i == L->length)//i小于0也应该报错
      printf("not be founded\n");
}
int InsertList(Sqlist* L, int i, ElementType x)
{
    int k;
    if (L->length == MAXSIZE)//表满
      return 0;
    if (i<1 || i>L->length - 1)
      return 0;
    if (i <= L->length - 1) {
      for (k = --L->length; k >=i; k--)/*k应该赋值为length-1,应该把i下标的位置的元素也往后移*/
            L->data = L->data;
    }
    L->data = x;   //应该在下标为i-1的地方插入x
    L->length++;
    return 1;
}
int DeleteList(Sqlist* L, int i)
{
    int k ;
    if (L->length == 0)
      return 0;
    if (i<0 || i>L->length - 1)
      return 0;
    if (i < L->length) {
      for (k = i-1; k < L->length; k++)//i-1下标的元素应该被覆盖
            L->data = L->data;
    }
    L->length--;
    return 1;
}
int main() {
    Sqlist L;
    CreatList(&L);
    TraverseList(&L);
    if(!GetElement(&L, 1))
      printf("return error!\n");
    SearchList(&L, 3);
    InsertList(&L, 2, 10);
    TraverseList(&L);
    DeleteList(&L, 4);
    TraverseList(&L);
    return 0;
}
页: [1]
查看完整版本: 顺序表