//对顺序表的操作
#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>
#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;j<L->length-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;i<L->length;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(i<L->length&&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;
}