鱼C论坛

 找回密码
 立即注册
查看: 3092|回复: 5

顺序表

[复制链接]
发表于 2020-11-23 18:34:27 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

void SearchList(Sqlist *L,ElementType x){
        int i=0;
        for(i=0;i<L->length;i++){
        if(L->data[i]==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[k]=L->data[k-1];
        }
        L->data[i]=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[k]=L->data[k+1];
        }
        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 19:05:06 | 显示全部楼层
        你发现什么问题或什么地方不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 19:08:52 From FishC Mobile | 显示全部楼层
就是输出结果全为零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 19:09:29 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-23 19:05
你发现什么问题或什么地方不对?

没有输出想输出的数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 19:31:41 | 显示全部楼层
苦学中 发表于 2020-11-23 19:09
没有输出想输出的数组

        你的输入是什么,期望得到的输出应该是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-4 18:57:50 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 100
  4. typedef double ElementType;
  5. typedef struct sqlist
  6. {
  7.     ElementType data[MAXSIZE];
  8.     int length;
  9. }Sqlist;

  10. void CreatList(Sqlist* L)
  11. {   
  12.     int i;
  13.     double data[5] = { 1,2,3,4,5 };
  14.     /*这一步不用,这申请空间的是链表才用,顺序表在定义的时候就分配好了一段空间*/
  15.   /*  L = (Sqlist*)malloc(sizeof(Sqlist));*/
  16.     L->length = 0;
  17.     for (i = 0; i < 5; i++)
  18.     {
  19.         L->data[i] = data[i];
  20.         L->length++;//可直接++
  21.     }
  22. }

  23. ElementType GetElement(Sqlist* L, int i)
  24. {
  25.     return L->data[i];
  26. }

  27. void TraverseList(Sqlist* L)
  28. {
  29.     int j;
  30.     for (j = 0; j < L->length; j++) {
  31.         printf("%.1lf ", L->data[j]);//这样更清晰一些
  32.     }
  33.     printf("\n");
  34. }

  35. void SearchList(Sqlist* L, ElementType x)
  36. {
  37.     int i = 0;
  38.     for (i = 0; i < L->length; i++)
  39.         if (L->data[i] == x)
  40.         {
  41.             printf("the position is %d\n", i);
  42.             break;
  43.         }
  44.     if (i<0||i == L->length)//i小于0也应该报错
  45.         printf("not be founded\n");
  46. }
  47. int InsertList(Sqlist* L, int i, ElementType x)
  48. {
  49.     int k;
  50.     if (L->length == MAXSIZE)//表满
  51.         return 0;
  52.     if (i<1 || i>L->length - 1)
  53.         return 0;
  54.     if (i <= L->length - 1) {
  55.         for (k = --L->length; k >=i; k--)/*k应该赋值为length-1,应该把i下标的位置的元素也往后移*/
  56.             L->data[k] = L->data[k - 1];
  57.     }
  58.     L->data[i-1] = x;   //应该在下标为i-1的地方插入x
  59.     L->length++;
  60.     return 1;
  61. }
  62. int DeleteList(Sqlist* L, int i)
  63. {
  64.     int k ;
  65.     if (L->length == 0)
  66.         return 0;
  67.     if (i<0 || i>L->length - 1)
  68.         return 0;
  69.     if (i < L->length) {
  70.         for (k = i-1; k < L->length; k++)//i-1下标的元素应该被覆盖
  71.             L->data[k] = L->data[k + 1];
  72.     }
  73.     L->length--;
  74.     return 1;
  75. }
  76. int main() {
  77.     Sqlist L;
  78.     CreatList(&L);
  79.     TraverseList(&L);
  80.     if(!GetElement(&L, 1))
  81.         printf("return error!\n");
  82.     SearchList(&L, 3);
  83.     InsertList(&L, 2, 10);
  84.     TraverseList(&L);
  85.     DeleteList(&L, 4);
  86.     TraverseList(&L);
  87.     return 0;
  88. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 16:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表