顺序表(完美运行)

#include"stdafx.h"
#include"targetver.h"
#include<stdio.h>
#include<tchar.h>
#include<iostream>

using namespace std;

#define Maxsize 100 //最大空间

typedef struct {
int *elem;
int length; //顺序表的长度
}SqList;

bool InitList(SqList &L) //构造一个空的顺序表
{
//L加&表示引用型参数,函数内部的改变跳出函数后依然有效
//不加&的内部改变,跳出函数无效
L.elem = new int[Maxsize];
if (!L.elem) return false;
L.length = 0;
return true;
}

bool CreateList(SqList &L) //创建一个顺序表
{
int a, i = 0;
cin >> a;
while (a != -1) {
if (L.length == Maxsize) {
cout << "顺序表已满!";
return false;
}
L.elem[i++] = a;
L.length++;
cin >> a;
}
return true;

}

bool GetElem(SqList L, int i, int &e)
{
if (i<1 || i>L.length) return false;
//判断i值是否合理,不合理直接返回false
e = L.elem[i - 1];//第i1的单元存贮这第i个数据
return true;
}

int LocateElem(SqList L, int x)
{
for (int i = 0;i < L.length;i++)
if (L.elem[i] == x)
return i + 1;//返回第几个元素,如 : 第五个元素,其实下标是4
return -1;
}

bool ListInsert_Sq(SqList &L, int i, int e) {
if (i<1 || i>L.length + 1) return false; //i值不合法
if (L.length == Maxsize) return false;//存储空间已满
for (int j = L.length - 1;j >= i - 1;j--)
L.elem[j + 1] = L.elem[j];//从最后一个元素开始后移一位,直到第i个元素
L.elem[i - 1] = e;//将新元素e放入到第i个位置
L.length++;//表长增加1
return true;
}

bool ListDelete_Sq(SqList &L, int i ,int &e) {
if ((i < 1) || (i > L.length)) return false;//如果i值不合法
e = L.elem[i - 1];//删除的元素保留到e中
for (int j = i;j < L.length - 1;j++)
L.elem[j - 1] = L.elem[j];//被删除元素之后的元素前移
L.length--;//表长减一
return true;
}

void print(SqList L) {
cout << "输出顺序表" << endl;
for (int j = 0;j <= L.length - 1;j++)
cout << L.elem[j] << " ";
cout << endl;
}

void DestoryList(SqList &L) {
if (L.elem) delete[]L.elem; //释放存储空间
}

int main()
{
SqList myL;
int i, e, x;
cout << "1. 初始化\n";
cout << "2. 创建\n";
cout << "3. 取值\n";
cout << "4. 查找\n";
cout << "5. 插入\n";
cout << "6. 删除\n";
cout << "7. 输出\n";
cout << "8. 销毁\n";
cout << "0. 退出\n";
int choose = -1;
while (choose != 0) {
cout << "请选择:";
cin >> choose;
switch (choose) {
case 1://初始化顺序表
cout << "顺序表初始化..." << endl;
if (InitList(myL))
cout << "顺序表初始化成功!" << endl;
else
cout << "顺序表初始化失败!" << endl;
break;
case 2://创建顺序表
cout << "顺序表创建..." << endl;
cout << "输入整型数,输入-1结束" << endl;
if (CreateList(myL))
cout << "顺序表创建成功!" << endl;
else
cout << "创建顺序表失败!" << endl;
break;
case 3: //取值
cout << "输入整型数i,取第i个元素输出" << endl;
cin >> i;
if (GetElem(myL, i, e))
cout << "第i个元素是:" << e << endl;
else
cout << "顺序表取值失败!" << endl;
cout << "第i个元素是" << e << endl;
break;
case 4://查找
cout << "请输入要查找的数字x";
cin >> x;
if (LocateElem(myL, x) == -1)
cout << "查找失败!" << endl;
else
cout << "查找成功!" << endl;
break;
case 5:
cout << "请输入要插入的位置和要插入的数据元素e:";
cin >> i >> e;
if (ListInsert_Sq(myL, i, e))
cout << "插入成功!" << endl;
else
cout << "插入失败!" << endl;
break;
case 6: //删除
cout << "请输入要删除的位置i" << endl;
cin >> i;
if (ListDelete_Sq(myL, i, e))
cout << "删除成功!" << endl;
else
cout << "删除失败!" << endl;
break;
case 7://输出
print(myL);
break;
case 8://销毁
cout << "顺序表销毁..." << endl;
DestoryList(myL);
break;
}
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/zfyer/p/12792443.html