//对顺序表的操作
#include
#include
#include
#define MAXSIZE   1000

typedef char ElemType;

typedef struct
{
 ElemType data[MAXSIZE];
 int length;
}SqList;

//初始化线性表
void InitList(SqList*&L)
{
 L=(SqList*)malloc(sizeof(SqList));
 L->length=0;
}
//销毁线性表
void DestoryList(SqList*&L)
{
 free(L);
}
//判断线性表是否为空
int ListEmpty(SqList*L)
{
 return(L->length==0);
}
//插入数据元素,起始位置为1
int ListInsert(SqList*&L,int Position,ElemType item)
{
 int j;
 if(Position<1||Position>L->length+1)
 {
  printf("元素插入失败,请检查输入的位置是否有错!\n");
  return 0;
 }
 Position--;
 for(j=L->length;j>Position;j--)
 {
  L->data[j]=L->data[j-1];
 }
 L->data[Position]=item;
 L->length++;
 printf("元素插入成功\n");
 return 1;
}

//替换第Position个元素的值
int ListReplace(SqList*&L,int Position,ElemType item)
{
 if(Position<1||Position>L->length)
 {
  printf("元素位序号错误! \n");
  return 0;
 }
 Position--;
 L->data[Position]=item;
 printf("元素存放成功!\n");
 return 1;
}
//删除数据元素
int ListDelete(SqList*&L,int Position,ElemType &item)
{
 int j;
 if(Position<1||Position>L->length)
 {
  printf("输入的位号有误!\n");
  return 0;
 }
 Position --;
 item=L->data[Position];
 for(j=Position;jlength-1;j++)
 {L->data[j]=L->data[j+1];}
 L->length--;
 return 1;
}
//输出线性表
void DispList(SqList *L)
{
 int i;
 if(ListEmpty(L))
 {
  printf("表空!\n");
  return;
 }
 for(i=0;ilength;i++)
  printf("%c ",L->data[i]);
 printf("\n");
}

//求线性表中某个数据元素值
int GetElem(SqList*L,int Position,ElemType&item)
{
 if(Position<1||Position>L->length)
 {return 0;}
 item=L->data[Position-1];
 return 1;
}
//求线性表的长度
int ListLength (SqList*L)
{
 return(L->length);
}
//按元素值查找
int LocateElem(SqList*L,ElemType item)
{
 int i=0;
 while(ilength&&L->data[i]!=item)i++;
 if(i>=L->length)
  return 0;
 else
  return i+1;
}

void clear()
{
 system("pause");
 system("cls");
}
void showmenu()
{
 
 printf("\n\n\n");
 printf("            --线性表的基本运算--           \n");
 printf("********************************************\n");
 printf("*     1---插入一个新元素到第i个位置        *\n");
 printf("*     2---删除第i个位置的元素              *\n");
 printf("*     3---存一个新元素到第i个位置          *\n");
 printf("*     4---显示顺序表中所有元素的值         *\n");
 printf("*     5---检索表中第i个元素                *\n");
 printf("*     6---求表的长度                       *\n");
 printf("*                                          *\n");
 printf("*     0---退出                             *\n");
 printf("********************************************");
 printf("\n请选择菜单号(0--6):");
}

void Charu()
{
 SqList*L;
 InitList(L);//创建一个顺序表
 char choice='N';
 ElemType item;
 int Position;
 printf("请输入一个新元素的值:");
 flushall();
 scanf("%c",&item);
 printf("请输入插入的位置:");
 scanf("%d",&Position);
 ListInsert(L,Position,item);
}

void Shanchu()
{
 char choice='N';
 ElemType item;
 int Position;

 SqList*L;
 InitList(L);//创建一个顺序表
 printf("请输入要删除的元素的位置序号:");
 scanf("%d",&Position);
 if(ListDelete(L,Position,item))
 {
  printf("删除的元素为%c\n",item);
 }
}

void Xiugai()
{
 char choice='N';
 ElemType item;
 int Position;

 SqList*L;
 InitList(L);//创建一个顺序表

 printf("请输入一个新元素的值:");
 flushall();
 scanf("%c",&item);
 printf("请输入该元素的存放位置:");
 scanf("%d",&Position);
 ListReplace(L,Position,item);
}

void Jiansuo()
{
 char choice='N';
 ElemType item;
 int Position;

 SqList*L;
 InitList(L);//创建一个顺序表
 printf("请输入元素的位序号:");
 scanf("%d",&Position);
 if(GetElem(L,Position,item))
 {
  printf("第%d个元素为:%c\n",Position,item);
 }
 else
 {
  printf("输入的位序号有误!\n");
 }
}
void LineOP()
{
 char choice='N';
 ElemType item;
 int Position;

 SqList*L;
 InitList(L);//创建一个顺序表

 while(choice!='0')
 {
  showmenu();
  flushall();
  scanf("%c",&choice);
  switch(choice)
  {
  case'1':
   Charu();
   clear();
   break;

  case'2':
   Shanchu();
   clear();
   break;

  case'3':
   Xiugai();
   clear();
   break;

  case'4':
   DispList(L);
   clear();
   break;

  case'5':
   Jiansuo();
   clear();
   break;

  case'6':
   printf("线性表的长度为%d",ListLength(L));
   clear();
   break;

  case'0':
   printf("\n\t程序结束!\n");
   DestoryList(L);
   break;

  default:
   printf("\n\t选择错误,请重新输入!\n");
   break;
  }
 }
}

int main()
{
 LineOP();
 return 0;
}