#ifndef SQLIST_H
#define SQLIST_H
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#define MAXSIZE 100//最大存储容量
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
void InitList(SqList *q); //初始化
void InsertList(SqList *q,int i,ElemType e); //在第i个位置插入e
void DeleteList(SqList *q,int i); //删除第i个位置
int LocateElem(SqList *q,ElemType e);
//在顺序表中查找元素e是否存在,不存在返回-1,否则返回所在的位置
void Change(SqList *q,int i,ElemType e);//在顺序表中修改第i处的元素
#endif //SQLIST_H
#include "顺序线性表2.h"
using namespace std;
void InitList(SqList *q)
{
//将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,
块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
memset(q->data,0,sizeof(ElemType)
* MAXSIZE); //初始化顺序表的元素为0
q->length = 0;
//初始化顺序表的当前大小为0
}
void Change (SqList *q,int i,ElemType e)//xiugai
{
if(i>0&&i<=q->length)
q->data[i-1]=e;
else
printf("超出范围,元素返回失败\n");
}
void InsertList(SqList *q,int i,ElemType e) //在顺序表的第i个位置插入元素e
{
if(i > MAXSIZE || i
<= 0)
{
printf("超出范围,元素插入失败\n");
return;
}
for(int j = q->length - 1;j
>= i - 1;--j)//将i个位置与i之后的所有元素向后移一位(下标值从零开始i -
1)
q->data[j + 1] =
q->data[j];
q->data[i - 1] = e;
//将元素插入到顺序表中,下标值从零开始
++q->length; //增加当前顺序表的长度值
}
void DeleteList(SqList *q,int i) //将顺序表中第i个位置的元素删除,将删除的元素存入e
{
if(i <= 0
&& i >
q->length)
{
printf("超出范围,元素删除失败\n");
return;
}
for(int j = i - 1;j <
q->length - 1;++j) //第i个位置之后的所有元素向前移动
q->data[j] =
q->data[j + 1];
--q->length; //当前的顺序表长度减1
}
int LocateElem(SqList *q,ElemType e)
//在顺序表中查找元素e,如果找到返回位置,否则返回-1
{
for(int i = 0;i <
q->length;++i)
{
if(q->data[i] ==
e)
return i + 1;
//下标从0开始,所以要加上1
}
return -1;
}
int main()
{
SqList q;
InitList(&q); //初始化顺序表
int element;
int i = 1; //首次需要插入一些元素
printf("请输入要插入顺序表中的内容:(CTRL + Z)结束\n");
while((scanf("%d",&element)) !=
EOF)
{
InsertList(&q,i,element);
++i;
}
fflush(stdin); //清空缓冲区,确保输入正确
string ee="continue";
while(ee=="continue")
{
int count;
cout<<"请输入要进行的项目"<<endl;
cout<<"1:增加"<<"2::删除"<<"3:查找"<<"4:修改"<<endl;
cin>>count;
switch(count)
{
case 1:
int o;
cout<<"请输入要插入的位置"<<endl;
cin>>o;
cout<<"请输入在第"<<o<<"处插入的元素"<<endl;
scanf("%d",&element);
InsertList(&q,o,element);
printf("顺序表的内容为:\n");
for(int j =
0;j < q.length;++j)
printf("%d
",q.data[j]);
cout<<endl;
fflush(stdin);
break;
case 2:
int i;
printf("请输入要删除的元素的位置\n");
cin>>i;
DeleteList(&q,i);
printf("顺序表的内容为:\n");
for(int j =
0;j < q.length;++j)
printf("%d
",q.data[j]);
printf("\n");
fflush(stdin);
break;
case 3:
printf("请输入要在表中查找的元素:\n");
scanf("%d",&element);
if((i =
LocateElem(&q,element)) == -1)
printf("顺序表中不存在元素:%d\n",element);
else
printf("在顺序表的第%d个位置找到元素:%d\n",i,element);
fflush(stdin);
break;
case 4:
cout<<"请输入要修改元素的位置"<<endl;
int l;
cin>>l;
cout<<"请输入要改成的值"<<endl;
cin>>element;
Change(&q,l,element);
for(int
i=0;i<q.length;i++)
cout<<q.data[i]<<endl;
fflush(stdin);
break;
}
cout<<"输入continue继续操作,其他任意键退出程序"<<endl;
cin>>ee;
}
return 0;
}