C语言项目实现顺序表

#include <stdio.h>
#include <stdlib.h>
#include "test_顺序表声明.h" 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
     SeqList L1;
     ElemType x1;
     int i,num=1,num1,num2,num3,num4,num5; 
     init_SeqList(&L1);//预先清空顺序表,准备开始存放数据
     printf("顺序表已初始化,可以直接操作!\n");
     printf("0:表示退出\n");
     printf("1:表示录入元素\n");
     printf("2:插入元素\n");
     printf("3:删除元素\n");
     printf("4:查找表中元素\n");
     printf("5:取某个元素\n");
     printf("6:判断顺序表是否为空\n");
     printf("7:求顺序表的长度\n");
     printf("8:清空顺序表\n");
     while(num!=0)
     {
         printf("\n请输入指令:");
         scanf("%d",&num);
         switch(num)
         {
             case 0:exit(0);
             break;
             case 1:printf("请输入你要输入元素的个数:\n");
             scanf("%d",&L1.length);
             printf("请开始输入%d个元素\n",L1.length);
             for(i=1;i<=L1.length;i++)
             {
                 scanf("%d",&L1.elem[i]);
             }
             break;
             case 2:printf("请输入要插入的元素:\n");
             scanf("%d",&num1);
             printf("请输入你要插入几号位置:\n");
             scanf("%d",&num2);
             num1=Inser_SeqList(&L1,num2,num1);
             if(num1==1)
             printf("插入成功!\n");
             else
             printf("插入失败!\n");
             printList(L1);
             break;
             case 3:printf("请输入删除元素的位置:\n");
             scanf("%d",&num3);
             num3=Delete_SeqList(&L1,num3);
             if(num3==1)
             printf("删除成功!\n");
             else
             printf("删除失败!\n");
             printList(L1);
             break;
             case 4:printf("请输入你要查找的元素:\n");
             scanf("%d",&x1);
             num=Location_SeqList(L1,x1);
             if(num==-1)
             printf("此位置没有元素!\n");
             else
             printf("此元素位置在:%d\n",num);
             break;
             case 5:printf("请输入要取元素的位置:\n");
             scanf("%d",&num5);
             num=Location_SeqList1(L1,num5);
             if(num==-1)
             printf("此位置没有元素!\n");
             else 
             printf("第%d号位置为:%d",num5,num);
             break;
             case 6:num=ListEmpty(&L1);
             printf("数据表ture表示空,false表示非空\n");
             if(num==-1)
             {
             printf("判断结果为:%c%c%c%c\n",116,117,114,101);
             }
             else if(num==1)
             {
             printf("判断结果为:%c%c%c%c%c\n",102,97,108,115,101);
             }
             else{
              printf("程序错误!");
             }
             break;
             case 7:num=LongList(&L1);
             if(num==-1)
             printf("长度为:0");
             else
             printf("长度为:%d",num);
             break;
             case 8:ClearList(&L1);
             printf("顺序表已清空!\n");
             break;
             default:printf("指令错误!请重输!\n");
             break; 
         }
         printList(L1);
        
     }
    return 0;
}

项目的main函数,也是顺序表项目的启动器

#include <stdio.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType elem[MAXSIZE];
    int length;
}SeqList;//定义一个顺序表
//初始化顺序表 
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("位置不对\n");
    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位置,这个元素\n",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)
 {
     
     //第一个条件跳出,表长不够,或者说查找数据不在此内
    //第二个条件跳出,数据被找到了 
     if(i<L.length&&i>0)//判断位置的合法性 
     return L.elem[i];
     else
     return -1;
  } 
  //判断线性表是否为空 
  int ListEmpty(SeqList *L)
  {
      if(L->length!=0)
      return 1;
      else
      return -1; 
  }

  //输出表的长度 
  int LongList(SeqList *L)
  {
      if(L->length!=0)
      return L->length;
      else
      return -1; 
  }
  //清空表 
  int ClearList(SeqList *L)
  {
    L->length=0;//长度为0,顺序表自然为空
    return 1;
  }
  void printList(SeqList L)
  {
      int i;
      for(i=1;i<=L.length;i++)
      {
          printf("%-3d",L.elem[i]);
      }
  }

顺序表所用到的函数,都写在了"test.函数"之中

//项目函数声明
#define
MAXSIZE 20 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE]; int length; }SeqList;//定义一个顺序表 SeqList *L; void init_SeqList(SeqList *L); int Inser_SeqList(SeqList *L,int i,ElemType x); int Delete_SeqList(SeqList *L,int i); int Location_SeqList(SeqList L,ElemType x); int Location_SeqList1(SeqList L,int i); int ListEmpty(SeqList *L); int LongList(SeqList *L); int ClearList(SeqList *L); void printList(SeqList L);

项目的函数声明,项目也必须要这个声明,一般不声明编译器会自己改动函数的返回值为int,但是我们的输入值可能为:float,double,char等等

此项目都是用的int,可能不用声明结果不会错,但是现实中大部分情况都是有问题的。

posted @ 2022-07-12 21:39  回忆也交给时间  阅读(35)  评论(0编辑  收藏  举报