本文只涉及顺序表的基本操作,由于本人是初学者所以相关排序和查找等算法后期更新。
本文涉及顺序表的以下内容:
- 顺序表的初始化
- 顺序表的合法判定
- 顺序表成员的打印
- 顺序表成员的赋值
- 顺序表长度的查看
- 查看顺序表的前驱和后继
- 顺序表成员的清空
- *顺序表成员的插入
- *顺序表成员的删除
/*顺序表test*/
#include<iostream>
#include<stdlib.h>
#include<string.h>
#define max_size 100
#define OK 1
#define error 0
typedef int Status;
typedef int inttype;
typedef struct{
int data[max_size];
int length;
}SQList;
//初始化列表
Status initList(SQList &L){
memset(L.data,0,sizeof(SQList));
L.length=0;
return OK;
}
//判断顺序表是否合法
bool judgeList(SQList &L,int l){
if (l<0||l>max_size)
{
return false;
}
else
return true;
}
//打印顺序表
void printlist(SQList &L){
if(L.length==0){printf("没有成员!\n");}
else{
printf("当前顺序表长度为%d且成员如下:\n",L.length);
for(int i=0;i<L.length;i++){
printf("%d\t",L.data[i]);
}
}
printf("\n \n");
}
//赋值列表
void createElem(SQList &L){
int l;
bool j;
printf("请输入顺序表长度:");
scanf("%d",&l);
if(l==0)printf("此表为空表\n");
j=judgeList(L,l);
if(j==1){
for(int i =0;i<l;i++){
printf("请输入%d个数字:",i+1);
scanf("%d",&L.data[i]);
L.length++;
}printlist(L);
}
else{
printf("顺序表长度非法,长度范围应为(0~100)\n");
}
}
//查看顺序表长度
void getListlength(SQList &L){
printf("表长度为:%d\n",L.length);
printf("\n \n");
}
//查看某个成员的前驱
void priorElem(SQList &L){
int s;
printf("请输入所查看的成员:");
scanf("%d",&s);
if(s==L.data[0])printf("该成员为第一个成员所以没有前驱!\n");
for(int i=1;i<L.length;i++){
if(L.data[i]==s)printf("该成员的前驱为:%d\n",L.data[i-1]);
}
}
//查看某个成员的后继
void nextElem(SQList &L){
int s;
printf("请输入要查看的成员:");
scanf("%d",&s);
if(s==L.data[L.length-1])printf("该成员为最后一个,所以没有后继!\n");
for(int i=0;i<L.length-1;i++)
{if(L.data[i]==s)printf("该成员的后继为:%d\n",L.data[i+1]);
}
}
//顺序表某个新成员的插入
void listinsert(SQList &L){
int i,a;
printf("请输入所插入的新成员:");
scanf("%d",&i);
printf("请输入所插入的位置,位置范围(0~%d):",L.length);
scanf("%d",&a);
for(int f=L.length;f>=a;f--){
L.data[f]=L.data[f-1];
if(f==a)L.data[a]=i;
}
L.length++;
printlist(L);
}
//删除顺序表中某个成员
void deleteElem(SQList &L){
int d,a;
printf("请输入所删除的成员:");
scanf("%d",&d);
for(int f=0;f<L.length;f++){
if(d==L.data[f])a=f;
}
for(int f=a;f<L.length-1;f++){
L.data[f]=L.data[f+1];
}
L.length--;
printlist(L);
}
//清空顺序表
void clearList(SQList &L){
memset(L.data,0,sizeof(SQList));
L.length=0;
printf("已清空!\n");
printlist(L);
}
//操作代码菜单
void opreatmenu()
{
printf("**********操作代码**********\n");
printf("顺序表的创建-----1\t顺序表的清空-----2\t查看顺序表长-----3\t获得顺序表成员-----4\n查看成员前驱-----5\t查看表成员后继-----6\t新成员插入表-----7\t某个表成员删除-----8\t退出程序----9\n");
printf("***************************\n \n");
}
//主函数
int main(){
SQList L;
int j,choice;
j=initList(L);
if(j==1){
while(1){
opreatmenu();
printf("请输入操作代码:");
scanf("%d",&choice);
if(choice==9)break;
switch(choice){
case 1: createElem(L);break;
case 2: clearList(L);break;
case 3: getListlength(L);break;
case 4: printlist(L);break;
case 5: priorElem(L);break;
case 6: nextElem(L);break;
case 7: listinsert(L);break;
case 8: deleteElem(L);break;
default:printf("操作代码不在范围内");
}
}
}
}
由于作者知识有限,若有不足恳请指正。