线性表:
(1)顺序表的定义、插入、删除、查找、长度;
#include<iostream>
#include<stdlib.h>
using namespace std;
#define MaxSize 10 //定义最大长度
#define InitSize 10//顺序表初始长度
typedef struct {
int data[MaxSize];
int length; //顺序表当前的长度
}SqList; //顺序表的典型定义
//初始化一个顺序表
void InitList(SqList& L)
{
L.length = 5; //初始长度
for (int i = 0; i < L.length; i++)
L.data[i] = i; //所有元素初始值
}
//插入
void ListInsert(SqList& L, int i, int e) //在第i个位置插入元素e
{
//注意插入元素范围的区间:[1,length+1]
if (i < 1 || i > L.length + 1) {
cout << "插入位置错误";
return;
}
if (L.length >= MaxSize) {
cout << "顺序表已满,无法插入" << endl;
return;
}
for (int j = L.length; j >= i; j--) {
L.data[j] = L.data[j - 1]; //第i个元素之后全部后移一位
}
L.data[i - 1] = e; //插入元素到第i个位置
L.length++; //顺序表长度加1
}
//删除
bool ListDelete(SqList& L, int i, int& e) // int& e为引用型参数,把此次删除的参数返回
{
if (i<1 || i>L.length)
return false;
e = L.data[i - 1];//注意数组下标-1
//i之后的数据依次前移1位
for (int j = i; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
//查找
//按位查找--静态
int getelem(SqList L, int i)
{
return L.data[i - 1];
}
//按位查找--动态
typedef struct {
int* data; //指示动态分配数组的指针
//int MaxSize;
int length;//顺序表当前长度
}SeqList;
int GetElem(SeqList L, int i)
{
return L.data[i - 1];
}
//按值查找
int LocateElem(SeqList L,int m){
for (int i = 0; i < L.length; i++)
if (L.data[i] == m)
return i + 1;
}
int main()
{
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
for (int i = 0; i < L.length; i++) {
cout << L.data[i] << " ";
}
cout << endl;//输出插入之前
ListInsert(L, 3, 1);
//输出插入之后
for (int i = 0; i < L.length; i++) {
cout << L.data[i] << " ";
}
cout << endl;
int e = -1;//定义与顺序表中同类型的变量e 用变量e把删除的元素“带回来”
if (ListDelete(L, 3, e))//用e这个变量来返回
cout << "已删除第3个元素,删除数据值为" << e;
else
cout << "删除失败" << endl;
cout << endl;
for (int i = 0; i < L.length; i++) {
cout << L.data[i] << " ";
}
cout << endl;
//打印 静态 按位查找
int fourthElement = getelem(L, 4);//为了正确输出第四个元素的值,
//需要将 getelem(L, 4) 的返回值赋给一个变量,并打印该变量的值
cout << "第四个元素为:" << fourthElement << endl;
// LocateElem(L, 2);
cout << endl;
system("pause");
return 0;
}