数据与结构-顺序表

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType elem[MAXSIZE];
    int length;
}SeqList;//定义一个顺序表
SeqList *L;
//初始化顺序表 
void init_SeqList(SeqList *L)
{
    L->length=0;//长度为0,顺序表自然为空 
}
//插入函数
int Inser_SeqList(SeqList *L,int i,ElemType x)
{
    int j;
    if(L->length==MAXSIZE-1)//表满 
    {
        printf("表满!");
        return -1;
    }
    if(i<1||i>L->length+1)//0号位置不放数据,这句话的意思 
    {
    printf("表满!");
    return -1;    
    }
    //排除了所有不能插入的情况后,可以直接开始插入 
    for(j=L->length;j>=i;j--)
    L->elem[j+1]=L->elem[j];//逐个移动位置,直到把待插入的位置空出来 
    L->elem[i]=x; //待插入的位置空余后,把待插入的数据赋值给那个位置
    L->length++;
    return 1;
    //1表示成功,-1表示不成功 
 } 
 //删除函数         待删除的数据表,待删除的位置 
 int Delete_SeqList(SeqList *L,int i)
 {
     int j;
     if(i<1||i>L->length)
     {
         printf("不存在%d位置,这个元素",i);
         return -1;
     }
     for(j=i;j<=L->length-1;j++)
     {
         L->elem[j]=L->elem[j+1];//直接向删除位置进行数据移动,把删除位置的数据覆盖掉,完成删除(顺序表) 
     }
     L->length--;//长度收缩,完全丢掉 
     return 1;
 }
 //查找函数
 int Location_SeqList(SeqList *L,ElemType x)
 {
     int i=1;
     //第一个条件跳出,表长不够,或者说查找数据不在此内
    //第二个条件跳出,数据被找到了 
     while(i<L->length&&L->elem[i]!=x)
     i++;
     if(i>L->length)
     return -1;
     else
     return i;
  } 
  int Location_SeqList1(SeqList L,int i)
 {
     
     //第一个条件跳出,表长不够,或者说查找数据不在此内
    //第二个条件跳出,数据被找到了 
     while(i<L.length||i>0)//判断位置的合法性 
     
     return L.elem[i];
  } 
  //判断线性表是否为空 
  int ListEmpty(SeqList *L)
  {
      if(L->length!=0)
      return 1;
      else
      return -1; 
  }
  /* int ListEmpty1(SeqList *L)
  {
      int i=1;
    int j=0;
      while(i<=L->length)
      {
          if(L->elem[i]!=0)
          j++;
      }
      if(j!=0)
      return j;
      else
      return 0;
  }
*/
  //输出表的长度 
  int LongList(SeqList *L)
  {
      if(L->length!=0)
      return L->length;
      else
      return 1; 
  }
  //清空表 
  int ClearList(SeqList *L)
  {
    L->length=0;//长度为0,顺序表自然为空
    return 1;
  }
 int main()
 {
     SeqList L1;
     int i,num; 
     init_SeqList(&L1);//预先清空顺序表,准备开始存放数据
     L1.length=6;
     printf("请输入6个数据!\n");
     for(i=1;i<=6;i++)
     {
         scanf("%d",&L1.elem[i]);
           }
    num=Inser_SeqList(&L1,4,6);
    printf("插入返回结果为:%d,其中:1表示成功,-1表示不成功 \n",num);
         for(i=1;i<=7;i++)
         {
         printf("%3d",L1.elem[i]);
         }             
     num=Delete_SeqList(&L1,2);
    printf("\n删除返回结果为:%d,其中:1表示成功,-1表示不成功 \n",num);
         for(i=1;i<=6;i++)
         {
         printf("%3d",L1.elem[i]);
         }    
         {
         printf("%3d",L1.elem[i]);
         }
         printf("\n");
    num=Location_SeqList1(L1,2);
    printf("取二号元素为:%d\n",num);
    num=ListEmpty(&L1);    
    printf("%d\n",num);
    if(num==-1)
    {
        printf("数据表ture表示空,false表示非空:%c%c%c%c\n",116,117,114,101);
    }
    else if(num==1)
    {
    printf("数据表ture表示空,false表示非空:%c%c%c%c%c\n",102,97,108,115,101);
     }
     else{
         printf("程序错误!");
     }
     num=LongList(&L1);
     printf("表长为:%d\n",num);
     printf("如果结果为负,表示为空表\n");
     ClearList(&L1);
     num=LongList(&L1);
     printf("清空表:如果结果为1,表示为空表(清空成功),为其它数字表示未成功\n");
     printf("结果为:%d\n",num);

     
}
 

 

posted @ 2022-06-13 21:47  回忆也交给时间  阅读(27)  评论(0编辑  收藏  举报