#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef int SetElemType;
typedef SetElemType ElemType;
//#define LESSER -1
//#define BIGGER 1
//#define EQUAL 0
//#include "definestatus.h"
#define MAXSIZE 100 //线性表存储空间的初始分配空间
typedef struct
{
ElemType *elem;//储存空间基地址;
int length;//当前长度;
}SqList;
Status InitList(SqList &L)//构建一个空的线性表;
{
L.elem = new ElemType[MAXSIZE];//为线性表分配一个大小为MAXSIZE的空间;
if(!L.elem) exit(OVERFLOW);//储存空间分配失败退出;
L.length = 0;//空表长度为0;
return OK;
}
Status ClearList(SqList &L,ElemType A[],int n)//初始化线性表;
//初始条件,A[]中存在线性表的n个数据元素,操作结果,构造一个含有n个大小为Elemtype的线性表;
{
L.elem = (ElemType *)malloc(n*sizeof(ElemType));
L.length = n;//表长度为n
for(int i=1;i<=L.length;++i) L.elem[i-1] = A[i-1];
return OK;
}
Status ListInsert(SqList &L,int i,ElemType e)
{
if((i<1)||(i>L.length+1)) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
/*
Status ListInsert(SqList &L,int i,ElemType e)//插入
{
if(i<1 || i >L.length+1)return ERROR;//i值不为空且i不大于线性表最大长度;
if(L.length==MAXSIZE) return ERROR;//当前空间已满;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];//插入位置及之后的元素后移;
L.elem[j-1]=e;//将元素e放到第i个位置
++L.length;//增加表长
return OK;
}
*/
Status ListDelete(SqList &L,int i)//删除线性表L中的元素第i个元素
{
int j;
if((i<1) || (i >L.length))return ERROR;//i值不合法
for(j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];//被删除之后的元素前移
--L.length;
return OK;
}
Status GetElem(SqList L,int i, ElemType &e)//返回线性表L中第i个元素值
{
if((i<1)||(i>L.length)) return ERROR;//i值不合法
e=L.elem[i-1];//返回第i个元素值
return OK;
}
Status LocateElem(SqList L,ElemType e)
{
for(int i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1;
return 0;
}
void DispList(SqList L)
{
int i;
if(!L.length)
{
printf("SqList=Null\n");
return;
}
for(i=0; i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
#include<stdio.h>
#include"head.h"
ElemType e1;
int main()
{
SqList La;
int i,key=1,n,e;
/*
InitList(La);
for (i=1;i<11;i++)ListInsert(La,i,i);
ClearList(La);
*/
while(key)
{
printf("\n\n\t====Sqlist option==\n");
printf("\t 1----Great Sqlist\n");//创建表
printf("\t 2----Insert element\n");//插入元素
printf("\t 3----Delete element in position i \n");//删除位于i的元素
printf("\t 4----Get element i\n");//查找GetElem(SqList L,int i,ElemType)
printf("\t 0-----Exit \n");
printf("\n\t Please input your choose (0-4):");
scanf("%d",&key);
if(key>=0&& key<=4) switch(key)
{
case 1:InitList(La);
system("cls");n=11;
printf("\t element number:");
scanf("%d",&n);
for (i=1;i<n+1;i++) ListInsert(La,i,i);
DispList(La);
break;
case 2:system("cls");
printf("\t position && value:");
scanf("%d%d",&i,&e);
ListInsert(La,i,e);
DispList(La);
break;
case 3:system("cls");
printf("\t element position:");
scanf("%d",&i);
ListDelete(La,i);
DispList(La);
break;
case 4:system("cls");
printf("\t element position:");
scanf("%d",&i);
GetElem(La,i,e);
DispList(La);
if(LocateElem(La,e))
{
printf("查找成功\n");
printf("Get element in position %d",LocateElem(La,e));
}
else
printf("查找失败\n");
break;
case 0:
break;
}
}
return 0;
}