xuanyin235 2014-12-26 02:59 采纳率: 0%
浏览 1932

C数据结构顺序表操作问题

两种操作方式
一、利用点运算符访问

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

#define MAXSIZE  100  

typedef struct  
{  
    int data[MAXSIZE];  //存放数组元素  
    int last;       //数组的最后一个元素的下标  
}squeuelist;  

    squeuelist l={0};

int main(void)  
{  
    int choice=0, mount=0, i=0, dat=0, pos=0;  

    while(1)  
    {  
        printf("   线性顺序表操作练习\n");  
        printf("1.创建一个顺序表\n");  
        printf("2.插入数据\n");  
        printf("3.删除数据\n");  
        printf("4.打印顺序表\n");  
        printf("5.退出\n");  
        printf("请输入你的选择(1-5):");  
        scanf("%d",&choice);  
        switch(choice)  
        {  
        case 1:  
            printf("请输入你要创建的元素个数:");  
            scanf("%d", &mount);  
            if(mount>MAXSIZE)  
            {  
                printf("创建的个数大于规定范围!");  
                break;  
            }  
            printf("请输入数据:");  
            for(i=0; i<mount; i++)  
            {  
                scanf("%d",&l.data[i]);  
            }  
            l.last = mount-1;  
            break;  
            //插入操作  
        case 2:  
            printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):");  
            scanf("%d %d", &dat, &pos);  
            if(l.last>MAXSIZE-1)  
            {  
                printf("空间溢出!\n");  
                break;  
            }  
            else if(pos<1 || pos>l.last+2)  
            {  
                printf("插入的位置非法!\n");  
                break;  
            }  
            else  
            {  
                for(i=l.last; i>=pos-1;i--)  
                {  
                    l.data[i+1] = l.data[i];  
                }  
                l.data[pos-1] = dat;  
                l.last += 1;  
            }  
            break;  
            //删除操作  
        case 3:  
            printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):");  
            scanf("%d",&pos);  
            if(pos<1 || pos>l.last+1)  
            {  
                printf("输入的位置无效!\n");  
                break;  
            }  
            else  
            {  
                for(i=pos; i<=l.last; i++)  
                {  
                    l.data[i-1] = l.data[i];  
                }  
                l.last -= 1;  
            }  
            break;  
            //打印输出顺序表  
        case 4:  
            if (mount<=0)
            {
                printf("No data!\n");
                break;
            }
            printf("顺序表为:");  
            for(i=0; i<=l.last; i++)  
            {  
                printf("%d ", l.data[i]);  
            }  
            printf("\n");  
            printf("顺序表的个数为:%d\n",l.last+1);  
            break;  
            //退出程序  
        case 5:  
            exit(0);  
            break;  
        default:  
            break;  
        }  
    }  
    return 1;  
}  

这种访问方式能够成功!

第二种方式利用指针访问

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

    #define MAXSIZE  100  

    typedef struct  
    {  
        int data[MAXSIZE];  //存放数组元素  
        int last;       //数组的最后一个元素的下标  
    }squeuelist;  

   squeuelist *l=NULL; 

    int main(void)  
    {  
        int choice=0, mount=0, i=0, dat=0, pos=0;  

        while(1)  
        {  
            printf("   线性顺序表操作练习\n");  
            printf("1.创建一个顺序表\n");  
            printf("2.插入数据\n");  
            printf("3.删除数据\n");  
            printf("4.打印顺序表\n");  
            printf("5.退出\n");  
            printf("请输入你的选择(1-5):");  
            scanf("%d",&choice);  
            switch(choice)  
            {  
            case 1:  
                printf("请输入你要创建的元素个数:");  
                scanf("%d", &mount);  
                if(mount>MAXSIZE)  
                {  
                    printf("创建的个数大于规定范围!");  
                    break;  
                }  
                printf("请输入数据:");  
                for(i=0; i<mount; i++)  
                {  
                    scanf("%d",&l->data[i]);  
                }  
                l->last = mount-1;  
                break;  
            //插入操作  
            case 2:  
                printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):");  
                scanf("%d %d", &dat, &pos);  
                if(l->last>MAXSIZE-1)  
                {  
                    printf("空间溢出!\n");  
                    break;  
                }  
                else if(pos<1 || pos>l->last+2)  
                {  
                    printf("插入的位置非法!\n");  
                    break;  
                }  
                else  
                {  
                    for(i=l->last; i>=pos-1;i--)  
                    {  
                        l->data[i+1] = l->data[i];  
                    }  
                    l->data[pos-1] = dat;  
                    l->last += 1;  
                }  
                break;  
            //删除操作  
            case 3:  
                printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):");  
                scanf("%d",&pos);  
                if(pos<1 || pos>l->last+1)  
                {  
                    printf("输入的位置无效!\n");  
                    break;  
                }  
                else  
                {  
                    for(i=pos; i<=l->last; i++)  
                    {  
                        l->data[i-1] = l->data[i];  
                    }  
                    l->last -= 1;  
                }  
                break;  
            //打印输出顺序表  
            case 4:  
                if (mount<=0)
                {
                    printf("顺序表无数据!\n");
                    break;
                }
                printf("顺序表为:");  
                for(i=0; i<=l->last; i++)  
                {  
                    printf("%d ", l->data[i]);  
                }  
                printf("\n");  
                printf("顺序表的个数为:%d\n",l->last+1);  
                break;  
            //退出程序  
            case 5:  
                exit(0);  
                break;  
            default:  
                break;  
            }  
        }  
        return 1;  
    }  

当运行创建一个顺序表时,显示出错,报指令引用的“0x00000000”内存,该内存不能被“written”。
求大神帮忙分析下~

  • 写回答

7条回答 默认 最新

  • xuanyin235 2014-12-26 03:07
    关注

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题