数据结构【顺序表】(可运行)

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OK 1
#define Error 0
int yes=0;

typedef struct 
{
 int elem[MAXSIZE];
 int length;
 
}Seqlist;

void menu()
{
  printf("\t\t\t顺序表基本操作实验\t\t\t\n");
  printf("*********************************************************\n");
  printf("*请选择命令序号(0-7):\t\t\t*\n");
  printf("*1 创建顺序表;\t\t\t\t\t*\n");
  printf("*2 顺序表插入;\t\t\t\t\t*\n");
  printf("*3 顺序表删除;\t\t\t\t\t*\n");
  printf("*4 顺序表长度输出;\t\t\t\t\t*\n");
  printf("*5 顺序表是否为空;\t\t\t\t\t*\n");
  printf("*6 顺序表查找元素;\t\t\t\t\t*\n");
  printf("*7 顺序表输出;\t\t\t\t\t*\n");
  printf("*0 程序退出;\t\t\t\t\t*\n");
  printf("********************************************************\n");
}
void Initlist(Seqlist *l)
{
 l->length;
}
int Creatlist(Seqlist *l)
{
  int i,n;
  if(l->length>0)
  {
   printf("线性表已经存在,不需要再创建!\n");
   return Error;
  }
printf("请输入顺序表的长度:\n");
scanf("%d",&n);
printf("请输入顺序表的元素(整型数):\n");
for(i=0;i<n;i++)
 scanf("%d",&(l->elem[i]));
l->length=n;
   yes=1;
   return OK;
}
int Inslist(Seqlist *l,int i,int e)/*顺序表插入元素操作*/
{
 int k;
 if(l->length>MAXSIZE)
     printf("空间不足,请补充空间!\n");
 else
 {
  for(k=l->length-1;k>=i-1;k--)
      l->elem[k+1]=l->elem[k];
  l->elem[i-1]=e;
  l->length++;
  printf("插入成功!\n");

 }
 return OK;

}
int Dellist(Seqlist *l,int i)
{
 int k;
 for(k=i-1;k<l->length;k++)
     l->elem[k]=l->elem[k+1];
      l->length--;
 printf("删除成功!\n");
 return OK;

}
int Lengthlist(Seqlist *l)
{
 if(yes==0)
 {
  printf("此时表未创建!因而没有长度!\n");
  return OK;
 }
 else
  printf("此时线性表的长度为%d\n",l->length);
 return OK;
}
void Emptylist(Seqlist *l)
{
 if(yes==0)
     printf("此时表未创建!不能判断是否为空!\n");
 else
 {
   if(l->length==0)
   printf("此时顺序表为空表!\n");
   else
       printf("此时顺序表为非空表!\n",l->length);
 }
}
void Findlist(Seqlist *l,int e)/*按值查找元素,若找到,返回顺序表中序号;否则返回错误信息*/
{
   int i=0;
   while((l->elem[i]!=e)&&(i<l->length))
   {
    i++;
   }
   if(i==l->length)
       printf("顺序表中不存在这个元素!\n");
   else
       printf("所查找到得元素位置是第%d个!\n",i+1);
}
void Dislist(Seqlist *l)/*输出顺序表*/
{
 int i;
 if(l->length == 0)
     printf("此时线性表为空!\n");
 else
 {
  printf("此时的线性表是:\n");
  for(i=0;i<l->length;i++)
   printf("%d\t",l->elem[i]);
  printf("\n");
 }
}
int main(void)
{
 Seqlist L;
 int i,sel,e,n;
 Initlist(&L);
 while(1)
 {
  menu();
  printf("请输入命令号(0----7):\n");
      scanf("%d",&sel);
  switch(sel)
  {
  case 1:Creatlist(&L);break;
  case 2:if(yes==0)
         {
          printf("此时表未创建!不能插入元素!\n");
          break;
         }
      else
      {
       printf("请输入要插入的位置:\n");
       scanf("%d",&i);
       printf("请输入要插入的值:\n");
       scanf("%d",&e);
       Inslist(&L,i,e);
       break;
      }
  case 3:if(yes==0)
         {
           printf("此时表未创建!不能删除元素!\n");\
               break;
         }
      else
      {
        printf("请输入要删除位置:\n");
        scanf("%d",&i);
        Dellist(&L,i);
        break;
      }
  case 4:Lengthlist(&L);break;
  case 5:Emptylist(&L);break;
  case 6:if(yes==0)
         {
           printf("此时表未创建!不能查找元素!\n");
           break;
         }
      else
      {
       printf("请输入要查找的元素!不能输出线性表!\n");
       scanf("%d",&n);
       Findlist(&L,n);
       break;
      }
  case 7:if(yes==0)
         {
           printf("此时表未创建!不能输出线性表!\n");
           break;
         }
      else 
      {
       Dislist(&L);
       break;
      }
  case 0:exit(1);break;
  default:
      printf("输入命令错误!请重新输入:\n");
      break;
  }


 }
return OK;

}

 

posted @ 2021-07-02 22:30  Justice-V  阅读(90)  评论(0)    收藏  举报