顺序表基本操作归纳整理

Think:
本篇blog主要 包括顺序表的4中基本操作
查询 ,插入, 移位, 删除

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LISTINCREASMENT 100                 /*每次分配元素的个数*/
#define  LISTSIZE 10                           /*顺序存储的最大个数*/
#define  OVERFLOW -1
#define  OK 1  
typedef int ElemType;

typedef struct                                   /*顺序表元素的的定义*/
{
    ElemType * elem;
    int length;
    int listsize;
} Sqlist;

int SqInitial(Sqlist &L)                           /*初始化线性表*/
{
    L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));
    if (! L.elem)  exit(OVERFLOW); //存储分配失败 
    L.length=0;
    L.listsize=LISTSIZE;
    return OK;
}

int ListInsert(Sqlist &L,int i,ElemType e)            /*插入元素*/
{
    if(i<1|| i > L.length+1) printf("ERROR!");
    if(L.length>=L.listsize)
    {
        ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)
                                            *sizeof(ElemType));
        if(!newbase)   return  OVERFLOW;// 当前存储空间已满

        L.elem=newbase;
        L.listsize+=LISTINCREASMENT;         /*表的容量不足分配内存*/
    }
    ElemType *  q=&(L.elem[i-1]);
    ElemType *  p;
    for(p=&(L.elem[L.length-1]); p>=q; --p)
        *(p+1)=*p;
    *q=e;
    ++L.length;
    return OK;

}

void ListDelete(Sqlist &L,int i,ElemType &e)           //删除线性表中第i个位置上的元素
{
    if(i<1||i>L.length) printf("ERROR!");
    else
    {
        e=L.elem[i-1];
        for(;i<L.length;i++)
        {
            L.elem[i-1]=L.elem[i];
        }
        L.length--;
    }

}
ElemType GetElem(Sqlist &L,int i)
{
    if(i<1||i>L.length) printf("ERROR!");
    else
    {
        return L.elem[i-1];
    }
}

int main()
{
    Sqlist L;
    int t =1 ,d;
    SqInitial(L);
    printf("构建长度为7的顺序表。\n");
    for(t=1; t<=7; t++)                         /*构建长度为7的顺序表*/
    {
        printf("Please input the %dth list elem:",t);
        scanf("%d",&d);
        ListInsert(L,t,d);
    }

    printf("表长: %d\n",L.length);             /*输出表长*/


    for(t=1; t<=L.length; t++)
        printf("%d ",L.elem[t-1]);/*读表*/

    printf("\n删除的位置:");                   //删除元素
    scanf("%d",&t);
    ListDelete(L,t,d);
    printf( "删除元素的值:%d\n",d);
    printf( "删除后的表:");
    for(t=1; t<=L.length; t++)
        printf("%d ",L.elem[t-1]);                 //删除后的表

    printf("\n要插入的位置");                   //插入元素
    scanf("%d",&t);
    printf("要插入的值");
    scanf("%d",&d);
    ListInsert(L,t,d);
    printf( "插入以后的表:");
    for(t=1; t<=L.length; t++)                  //插入以后的表
        printf("%d ",L.elem[t-1]);
    printf("\n要检索的元素的位置:");            //检索元素
    scanf("%d",&t);
    d=GetElem(L,t);
    printf( "该元素的值为:%d\n",d);
    return 0;
}
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值