顺序表的基本操作

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

#include
#include
#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
    {
        scanf("%d",&l->data[i]);
        l->length=n;
    }
}

//输出顺序表

void printlist(Seqlist *l,int n)
{
    int i;
    printf("顺序表为:");
    for(i=0;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;ilength;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;ilength+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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值