顺序表基本操作实现(c语言)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_SIZE 100

typedef int ElemType;
typedef struct node
{
    ElemType data[MAX_SIZE+1];
    int length;
}*seqList;

//初始化一个空的顺序表
seqList initSeqList()
{
    seqList l=(seqList)malloc(sizeof(struct node));
    if(!l)
    {
        printf("动态内存分配失败!\n");
        exit(0);
    }
    l->length=0;
    printf("顺序表初始化成功!\n");
    return l;
}

//添加一个元素
int elemInsert(seqList l,ElemType e)
{
    if(l->length<MAX_SIZE)
    {
        l->data[++l->length]=e;
        return 1;

    }
    return 0;

}
//删除一个元素
int elemDelete(seqList l,ElemType e)
{
    int i,k=-1;
    for(i=1; i<=l->length; i++)
    {
        if(l->data[i]==e)

            k=i;
    }
    if(k==-1)
        return 0;
    if(k<l->length)
    {
        for(i=k; i<=l->length; i++)
        {
            l->data[i]=l->data[i+1];
        }

    }
    l->length--;
    return 1;


}
//打印顺序表
void printSeqList(seqList l)
{
    int i;
    printf("打印顺序表:\n");
    for(i=1; i<=l->length; i++)
        printf("%d ",l->data[i]);
    printf("\n");
}
//返回顺序表中元素的下标
int elemLocate(seqList l,ElemType e)
{
      int i;
      for(i=1;i<=l->length;i++)
      {
            if(l->data[i]==e)
                  return i;
      }
      return 0;
}

//清空顺序表
int clearSeqList(seqList l)
{
      if(l)
      {
            l->length=0;
            return 1;
      }
      return 0;

}
//顺序表的长度
int listLength(seqList l)
{
      if(l)
            return l->length;
      return 0;
}
//销毁顺序表
int destorySeqList(seqList l)
{
      if(l)
      {
            clearSeqList(l);
            free(l);
            l=NULL;
            return 1;
      }
      return 0;

}
//通过索引获取顺序表元素
int getElem(seqList l,int k)
{
      int i;

      for(i=1;i<=l->length;i++)
      {
            if(i==k)
                  return l->data[i];
      }

            return 0;
}

//判断顺序表是否为空
int isEmpty(seqList l)
{
      if(l->length==0)
      {
            return 1;
      }
      return 0;
}
//求顺序表的前趋
int priorElem(seqList l,ElemType e,ElemType *prior)
{
      int i,k;
      if(k=elemLocate(l,e))
      {
            if(k>1)
            {
                  *prior=l->data[k-1];



                  return 1;
            }

      }
      return 0;

}
//求顺序表的后继
int nextElem(seqList l,ElemType e,ElemType *next)
{
      int i,k;
      if(k=elemLocate(l,e))
      {
            if(k<l->length)
            {
                  *next=l->data[k+1];



                  return 1;
            }


      }
      return 0;

}

int main()
{
    seqList l=initSeqList();
    if(isEmpty(l))
    {
          printf("顺序表l是空表!\n");
    }
    int n,i;
    ElemType d;
    printf("请输入元素个数:\n");
    scanf("%d",&n);
    printf("请输入%d个元素:\n",n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&d);

        elemInsert(l,d);
    }
    printSeqList(l);
    int deleteNum;
    printf("请输入要删除的元素:\n");
    scanf("%d",&deleteNum);
    if(elemDelete(l,deleteNum)==1)
    {
          printf("删除成功!");
           printSeqList(l);
    }
    else{
      printf("删除失败!");
    }
    int findNum;

    printf("输入要查找的元素:\n");
    scanf("%d",&findNum);
    if(elemLocate(l,findNum))
    {
          printf("查找成功!\n");
    }
    else
    {
          printf("未找到!");
    }
    int index,elem;
    printf("请输入某下标的元素:\n");
    scanf("%d",&index);
    if(elem=getElem(l,index))
    {
          printf("获取成功,元素值为%d\n",elem);
    }
    else
    {
          printf("获取失败!\n");
    }
    int prior,next,data;
    printf("请输入表中的一个数字:\n");
    scanf("%d",&data);
    if(priorElem(l,data,&prior))
    {
          printf("%d的前趋为%d\n",data,prior);
    }
    else
    {
          printf("%d没有前趋或%d不存在",data,data);
    }
     if(nextElem(l,data,&next))
    {
          printf("%d的后继为%d\n",data,next);
    }
    else
    {
          printf("%d没有后继或%d不存在",data,data);
    }



    //clearSeqList(l);
    if(destorySeqList(l))
    {
          //printSeqList(l);
          printf("销毁成功!\n");
    }


    return 0;
}

猜你喜欢

转载自blog.csdn.net/rj2017211811/article/details/85051796
今日推荐