#include<stdio.h>
#include<stdlib.h>
#include<iostream.>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType *elem;
int length;
}SqList;
//顺序表的初始化
Status InitList_Sq(SqList &L) //构造一个空的顺序表L
{
L.elem=new ElemType[MAXSIZE]; //为顺序表分配空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length=0; //空表长度为0
return OK;
}
//创建顺序表
void Create_Sq(SqList &L)
{
int length;
printf("请给顺序表赋值\n");
printf("你要输入几个数据:\n");
scanf("%d", &length);
printf("请依此输入这几个元素:\n");
for(int i=0;i<length;i++)
scanf("%d", &L.elem[i]);
L.length = length;
}
//在顺序表中取值
Status GetElem(SqList L,int i,ElemType &e)
{
if (i<1||i>L.length) return ERROR; //判断i值是否合理,若不合理,返回ERROR
e=L.elem[i-1]; //第i-1的单元存储着第i个数据
return OK;
}
//在顺序表中查找元素
Status LocateELem(SqList L,ElemType e)
{
int i;
for (i=0;i<L.length;i++)
if (L.elem[i]==e) return i+1;
return OK;
}
//在顺序表中插入元素
Status ListInsert_Sq(SqList &L,int i ,ElemType e)
{
int j;
if(i<1 || i>L.length+1) return ERROR; //i值不合法
if(L.length==MAXSIZE) return ERROR; //当前存储空间已满
for(j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长增1
return OK;
}
//顺序表中删除元素
Status ListDelete_Sq(SqList &L,int 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; //表长减1
return OK;
}
//打印顺序表
void print_Sq(SqList &L)
{
int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
int main()
{
SqList l;
int m;
int n;
InitList_Sq(l);
Create_Sq(l);
print_Sq(l);
GetElem(l,2,n);
printf("第二个位置的元素为%d\n",n);
m=LocateELem(l,02);
printf("02在顺序表中的位置为%d\n",m);
ListInsert_Sq(l,3,1);
printf("在第3个位置插入1后,该组数据变为\n");
print_Sq(l);
ListDelete_Sq(l,7);
printf("删除了第7个元素后,该组数据变为\n");
print_Sq(l);
}
顺序表的相关操作
于 2023-05-15 18:17:09 首次发布