利用顺序结构实现线性表的基本操作

//    实现的基本功能为:
//     (1)线性表的建立
//     (2)线性表的定位操作
//    (3)线性表的插入、删除操作
//    (4)线性表的输出操作
//    建立线性表的顺序储存结构
//      typedef struct
//      {  ElemType elem[MAXSIZE];
//         int length;
//       }SqList;
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#define MAXSIZE 30  //数组最大下界
typedef int ElemType;  //  数组元素类型
typedef struct
{   ElemType elem[MAXSIZE];  //一维数组子域
    int length;        //表长度子域
}SqList;            //顺序储存的结构体类型
SqList a,b,c;
// 建立线性吧表
void creat_list(SqList*L)
{  int i;
   printf("\n n=?");
   scanf("%d",&L->length);
   for(i=0;i<L->length;i++)
   {printf("\n data%d=",i);
    scanf("%d",&L->elem[i]);
   }
}
//输出线性表
void print_list(SqList L)
{  int i;char ch;
   printf("\n");
   for(i=0;i<=L.length-1;i++)
    printf("%10d",L.elem[i]);
   printf("\n\n    按回车键,继续。");
   ch=getch();
}
//在线性表的第i个位置插入元素e
void insert_sq(SqList*L,int i,ElemType e)
{   int j;
    if(L->length==MAXSIZE)
  printf("\n overflow!");
 else if(i<1||i>L->length+1)  
  printf("\n erroe i !");
 else
 { for(j=L->length-1;j<i-1;j--)
     L->elem[j+1]=L->elem[j];
     L->elem[i-1]=e;
     L->length++;
 }
}
//  删除第i个元素,返回其值
ElemType delete_sq(SqList*L,int i)
{  ElemType x; int j;
   if(L->length==0)
   { printf("\n线性表为空表。"); exit(1);
   }
   else if(i<1||i>L->length)
   { printf("\n i值错误!"); //x=-1;
     exit(1);
   }
   else
   { x=L->elem[i-1];
     for(j=i;j<=L->length-1;j++)  
   L->elem[j-1]=L->elem[j];
  L->length--;
   }
   return(x);
}
//查找值为e的元素,返回它的位置
int locat_sq(SqList L,ElemType e)
{ int i=0;
  while(i<=L.length-1&&L.elem[i]!=e)
     i++;
  if(i<L.length-1)  return(i+1);
   else return -1;
}
//主函数
void main()
{   int i,k,loc;
    ElemType e,x;
 char ch;
 do{ printf("*********************************************************************");
  printf("\n\n\n");
  printf("\n   1.建立线性表                                                                                       *");
  printf("\n   2.在第i个位置插入元素e                                                                  *");
  printf("\n   3.删除第i个元素,返回其值                                                            *");
  printf("\n   4.查找值为e的元素                                                                            *"); 
  printf("\n   5.结束程序运行                                                                                  *");
  printf("\n======================================================            *");
  printf("\n    请选择 (1,2,3,4,5)\n");
  printf("*********************************************************************");
  scanf("%d",&k);
  switch(k)
  { case 1:{creat_list(&a);  
            print_list(a);} break;
    case 2:{printf("\n i,e=?"); 
         scanf("%d,%d",&i,&e);
      insert_sq(&a,i,e);
      print_list(a);
     }  break;
    case 3:{printf("\n i=?");   
         scanf("%d",&i);
          x=delete_sq(&a,i);
       print_list(a);
       printf("\n x=%d",x);
     }break;
    case 4:{printf("\n e=?");
         scanf("%d",&e);
      loc=locat_sq(a,e);
           if(loc=-1) 
      printf("\n  未找到%d",loc);
      else
       printf("\n  已找到,元素的位置是%d",loc);
     }break;
  }
 }while(k!=5);
 printf("\n   按回车键,返回。"); ch=getch();
}//main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值