awfkapjfak 2022-04-13 16:58 采纳率: 68.8%
浏览 75
已结题

数据结构 顺序表的基本操作

img

#include "stdio.h"
#include "stdlib.h"

#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;

void initseqlist(sequence_list *L)
{ L->size=0;
}

void input(sequence_list *L)
{ datatype x;
initseqlist(L);
printf("请输入一组数据,以0做为结束符:\n");
scanf("%d",&x);
while (x)
{ L->a[L->size++]=x;
scanf("%d",&x);
}
}

void print(sequence_list L)
{ int i;
for (i=0;i<L.size;i++)
{ printf("%5d",L.a[i]);
if ((i+1)%10==0) printf("\n");
}
printf("\n");
}

void insertx(sequence_list *L,datatype x)
{
int j;
if(L->size<x){
j=L->size-1;
while(j>=0&&L->a[j]>x){
L->a[j+1]=L->a[j];
j--;
}
L->a[j+1]=x;
L->size++;
}
}

int main()
{
sequence_list L;
datatype x;
input(&L);
print(L);
printf("请输入待插入的元素:");
scanf("%d",&x);
insertx(&L,x);
printf("插入元素%d之后的顺序表为:",x);
print(L);
}
希望的结果是:原顺序表为:
11 22 3 45 55
第一个位置插入95之后的顺序表为:
95 11 22 3 45 55
删除3之后的顺序表为:
95 11 22 45 55
在45后面插入54之后的顺序表为:
95 11 22 45 54 55
朋友们,怎么写才能达到我想要的结果啊

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-13 20:28
    关注

    供参考:

    #include "stdio.h"
    #include "stdlib.h"
    #define MAXSIZE 100
    typedef int datatype;
    typedef struct{
        datatype a[MAXSIZE];
        int size;
    }sequence_list;
    
    void initseqlist(sequence_list *L)
    {
        L->size=0;
    }
    
    void input(sequence_list *L)
    {
        datatype x;
        initseqlist(L);
        printf("请输入一组数据,以0做为结束符:\n");
        scanf("%d",&x);
        while (x)
        {
            L->a[L->size++]=x;
            scanf("%d",&x);
        }
    }
    
    void print(sequence_list L)
    {
        int i;
        for (i=0;i<L.size;i++)
        {
            printf("%5d",L.a[i]);
            if ((i+1)%10==0)
                printf("\n");
        }
        printf("\n");
    }
    
    void insertx(sequence_list *L,int i,datatype x) //修改
    {
        int j;
        if (i < 1 || i > L->size + 1) return;
        for (j = L->size; j > i - 1; j--){
                L->a[j] = L->a[j - 1];
        }
        L->a[j]=x;
        L->size++;
    }
    
    void deletex(sequence_list *L,datatype x) //修改
    {
        int i,j;
        for (i = 0;i < L->size; i++){
             if (L->a[i] == x){
                 for (j = i;j < L->size - 1; j++){
                      L->a[j] = L->a[j + 1];
                 }
                 L->size--;
                 return;
             }
        }
        if (i == L->size)
            printf("顺序表中存放数据中值为%d的结点不存在!\n",x);
    }
    
    void insert_xy(sequence_list *L,datatype x,datatype y) //修改
    {
        int i,j;
        for (i = 0;i < L->size; i++){
             if (L->a[i] == x){
                 for (j = L->size; j > i + 1; j--){
                     L->a[j] = L->a[j - 1];
                 }
                 L->a[j] = y;
                 L->size++;
                 return;
             }
        }
        if (i == L->size)
            printf("顺序表中存放数据中值为%d的结点不存在!\n",x);
    }
    
    int main()
    {
        sequence_list L;
        datatype x,i;
        input(&L);
        print(L);
    
        printf("请输入待插入的位置,及待插入元素值(i,x):");
        scanf("%d%d",&i,&x);
        insertx(&L,i,x);
        printf("第%d个位置插入元素%d之后的顺序表为:\n",i,x);
        print(L);
    
        printf("请输入待删除元素数据值:");
        scanf("%d",&x);
        deletex(&L,x);
        printf("删除%d之后的顺序表为:\n",x);
        print(L);
    
        printf("在当前存放数据的值45后插入一个值为54的整形数据:\n");
        insert_xy(&L,45,54);
        print(L);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多