@【数据结构】(顺序表)
定义顺序表,获得顺序表长度,第i个元素,元素X的位置,删除元素Y
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
#define MaxSize 100
typedef int ElemType; //假设顺序表中所有元素为int类型
typedef struct
{
ElemType data[MaxSize]; //存放顺序表的元素
int length; //顺序表的实际长度
} SqList;
void InitList(SqList &L) //由于L要回传给实参,所以用引用类型
{
L.length = 0;
}
void DestroyList(SqList L)
{
}
int GetLength(SqList L)
{
return L.length;
}
int GetElem(SqList L, int i, ElemType &e)
{
if (i<1 || i>L.length) //无效参数
return 0;
else { e = L.data[i - 1]; return 1; } //取元素值并返回1
}
int Locate(SqList L, ElemType x)
{
int i = 0;
while (i < L.length&&L.data[i] != x)
i++;
if (i >= L.length) return 0; //未找到
else return (i+1);
}
int InsElem(SqList &L, ElemType x, int i) //指定位置插入
{
int j;
if (i<1 || i>L.length+1)
return 0;
for (j = L.length; j > i; j--) //位置i后的元素后移一位
L.data[j] = L.data[j - 1];
L.data[i-1] = x;
L.length++;
return 1;
}
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;
}
void DispList(SqList L) //输出
{
int i;
for ( i = 0; i < L.length; i++)
cout << L.data[i] << " ";
cout << endl;
}
void main()
{
int i;
ElemType e;
SqList L;
InitList(L);
InsElem(L, 3, 1);
InsElem(L, 5, 2);
InsElem(L, 7, 3);
InsElem(L, 9, 4);
InsElem(L, 0, 5);
cout << "线性表:";
DispList(L);
cout << "线性表长度为:" << GetLength(L) << endl;
i = 4; GetElem(L, i, e);
cout << "第4个元素为:" <<e<< endl;
e = 7;
cout << "线性表中元素7位于:" << Locate(L, 7) << endl;
int j = 2;
cout << "删除第二个元素" << endl;
DelElem(L, 2);
DispList(L);
cout << endl;
system("pause");
}
测试示例: