#include<iostream>
using namespace std;
#define MaxSize 100
typedef int ElemType;
typedef struct{
int data[MaxSize];
int length;
}SqList;
//(1)初始化线性表运算算法
void Initlist(SqList &L){ //初始化传给实参要引用
L.length = 0;
}
//(2)销毁线性表运算算法
void DestroyList(SqList L)
{
}
//(3)求线性表长度运算算法
int GetLength(SqList L){
return L.length;
}
//(4)求线性表中第i个元素运算算法
int GetElem(SqList L, int i, int &e){ //逻辑序号i无效返回0,有效返回1,引用形参e返回第i个元素的值
if (i<1 || i>L.length)
return 0;
else{
e = L.data[i - 1]; //取元素并返回1
return 1;
}
}
//(5)按值查找运算算法
int Locate(SqList L, int x){
//x为查找的值,找到后返回逻辑序号(逻辑序号从1开始,o表示没有找到)
int i = 0;
while (i < L.length&&L.data[i] != x)
i++;
if (i>L.length)
return (0);
else return(i + 1);
}
//(6)插入元素运算算法
int InsElem(SqList &L, int x, int i){
//将新元素x,插入到表中逻辑序号为i的位置
//插入成功成为第i个元素,失败返回0
int j;
if (i<1 || i>L.length + 1) //逻辑序号从1开始,并且不会大于表的长度
return 0;
for (j = L.length; j > i - 1; j--) //将位置i及之后的元素后移
L.data[j] = L.data[j - 1];
L.data[i - 1] = x;
L.length++;
return 1;
}
//(7)删除元素运算算法
int DelElem(SqList &L, int i){
int j;
if (i<1 || i>L.length)
return 0;
for (j = i; j < L.length; j++) //i之后的元素均前移
L.data[j - 1] = L.data[j];
L.length--;
return 1;
}
//(8)输出元素值运算算法
//遍历L,输出各元素值
void DispList(SqList L){
int i;
for (i = 0; i < L.length; i++)
printf("%d ", L.data[i]); //这里空格就输出空格
printf("\n");
}
int main(){
int i;
int data;
int e;
SqList L; //定义顺序表L
Initlist(L); //初始化顺序表L
InsElem(L, 1, 1);
InsElem(L, 3, 2);
InsElem(L, 1, 3);
InsElem(L, 5, 4);
InsElem(L, 4, 5);
InsElem(L, 2, 6);
printf("线性表:");
DispList(L);
printf("线性表的长度:%d\n", GetLength(L));
i = 3;
GetElem(L, i, e);
printf("线性表第%d个元素:%d\n", i, e);
e = 1;
printf("线性表元素%d是第%d个元素\n", e, Locate(L, e));
i = 4;
printf("删除线性表第%d个元素\n", i);
DelElem(L, i);
printf("线性表:");
DispList(L);
DestroyList(L);
}
基础线性表(8中基本算法)
最新推荐文章于 2024-05-17 11:57:42 发布