C语言/C++常见习题问答集锦[八十二]之数据结构顺序表

C语言/C++常见习题问答集锦[八十二]之数据结构顺序表

程序之美

在这里插入图片描述

前言

顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入、删除时需要移动大量元素。

主体

程序要求:建立一个顺序表,用户通过输入个数和一组非递减顺序的数,即顺序表按照非递减顺序排列,对顺序表进行建立,删除指定位置的数,查找指定位置的数,插入一个数字功能。

核心代码

程序代码如下:

#include <stdio.h>
#include <stdlib.h>
#define listsize 100

typedef struct{
    int data[listsize];
    int length;
}Seqlist;

//新建顺序表

void createlist(Seqlist *l,int n)
{
    int i;
    printf("请输入顺序表元素:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&l->data[i]);
        l->length=n;
    }
}

//输出顺序表

void printlist(Seqlist *l,int n)
{
    int i;
    printf("顺序表为:");
    for(i=0;i<n;i++)
    {
        printf("%d ",l->data[i]);
    }
}

//查找元素

void locateElem(Seqlist *l,int n)
{
    int i=1,*p;
    p=l->data;
    printf("\n请输入要查找的元素n:");
    scanf("%d",&n);
    while(i<=l->length&&(*p++!=n)) ++i;
    if(i<=l->length)
    printf("要查找的数的位置为:%d",i);
}

//插入元素

void listinsert(Seqlist *l,int i,int n)
{
    int *q,*p;
    printf("\n请输入要插入的数:");
    scanf("%d",&n);

    if(l->length==0)
    {
        l->data[0]=n;
        ++l->length;
       
    }
    q=&(l->data[0]);
    while((*q<=n)&&(q<=&(l->data[l->length-1])))
    {
        ++q;
    }
    ++l->length;
    for(p=&(l->data[l->length-1]);p>=q;--p)
    {
    *(p+1)=*p; 
    *p=n; 
    }

 printf("输出新表:\n");  
        for(i=0;i<l->length;i++)
     {
        printf("%d ",l->data[i]);
     }
}

//删除元素

void listdelete(Seqlist *l,int i,int n)
{
    int *p,*q;
    printf("\n请输入要删除的数的位置:");
    scanf("%d",&i);   
   
    if(i<1||i>l->length)
    printf("删除元素失败!");
   
    p=&l->data[i-1];
    n=*p;
    q=l->data+l->length-1;
    for(++p;p<=q;++p)
    {
         *(p-1)=*p;
         --l->length;   

    }
   
    for(i=0;i<l->length+1;i++)
    {
        printf("%d ",l->data[i]);
    }
}
void main()
{
    int n;
    int i=0;
    Seqlist l;
    l.length=0;
   
    printf("请输入线性表长度:");
    scanf("%d",&n);
    createlist(&l,n);
    printlist(&l,n);
    locateElem(&l,n);
    listinsert(&l,i,n);
    listdelete(&l,i,n);
    printf("\n");
}

运行结果

运行结果为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值