数据结构之顺序表

数据结构之顺序表的简单实践操作
1.操作
2.运行结果
3.总结

即(初始化,创建,取值,查找,插入,删除)

实践代码如下:
#include<stdio.h>
#include<stdlib.h>

//顺序表

//顺序表的定义
typedef int ElemType;
typedef struct {
ElemType *elem;//顺序表的基地址
int length;//顺序表的长度
}SqList; //别名 如果没有typedef关键字,则每次定义一个新变量的时候要用struct 类型名

#define MaxSize 20 //宏定义MaxSize,不能写成MaxSize=20

//1.初始化 initList(SqList &L) &表示引用,才可修改顺序表的值
//2.创建 CreateList(SqList &L)
//3.取值 GetElem(SqList L,int i,int &e)
//4.查找 LocateElem(SqList L,int e)
//5.插入 ListInsert_Sq(SqList &L,int i,int e)
//6.删除 ListDelete_Sq(SqList &L,int i,int &e)

//声明函数(互相调用的函数位置可以任意
bool initList(SqList &L);
bool CreateList(SqList &L);
bool GetElem(SqList L, int i, int &e);
int LocateElem(SqList L, int e);
bool ListInsert_Sq(SqList &L, int i, int e);
bool ListDelete_Sq(SqList &L, int i, int &e);

//具体实现每一个函数
bool initList(SqList &L) {
L.elem = new int[MaxSize];
if (!L.elem)
return false;
L.length = 0;
return true;
}

bool CreateList(SqList &L) {
int i=0, v;
scanf_s("%d", &v);
while (v != -1) {
//顺序表满异常处理
if (L.length == MaxSize)
return false;
L.elem[i++] = v;
L.length++;
scanf_s("%d", &v);
}
return true;
}

bool GetElem(SqList L, int i, int &e) {
if (i<1 || i>L.length)//超出范围取值异常
return false;

e = L.elem[i - 1];
return true;

}

int LocateElem(SqList L, int e) {
for (int i = 0; i < L.length; i++)
if (e == L.elem[i])
return i + 1;
return -1;//不存在返回-1
}

bool ListInsert_Sq(SqList &L, int i, int e) {
if (i<1 || i>L.length + 1)//超出异常范围处理
return false;
for (int j = L.length - 1; j >= i - 1; j–) {
L.elem[j + 1] = L.elem[j];
}
L.elem[i - 1] = e;
L.length++;
return true;
}

bool ListDelete_Sq(SqList &L, int i, int &e) {
if (i<1 || i>L.length)
return false;
e = L.elem[i - 1];
for (int j = i - 1; j < L.length - 1; j++) {
L.elem[j] = L.elem[j + 1];
}
L.length–;
return true;
}
void represent() {
printf(“选择顺序表的功能如下:\n”);
printf(“1.顺序表的创建\n”);
printf(“2.顺序表的取值\n”);
printf(“3.顺序表的值的下标\n”);
printf(“4.顺序表值的插入\n”);
printf(“5.顺序表值的删除\n”);
}

//打印顺序表
void print(SqList L) {
printf(“顺序表为:”);
if (L.length == 0) {//如果为空
printf(“null\n\n”);
return;
}
for (int i = 0; i < L.length; i++) {
printf("%d “, L.elem[i]);
}
printf(”\n\n");
}

void main() {
SqList L;
initList(L);
bool flag = true;//表示只能创建一次,除非删除空了
int c=0;
while (true) {
c = 0;
represent();//代表显示选择功能函数
printf(“请选择第几个功能:”);
scanf_s("%d", &c);
//system(“cls”);
if (c == 1 && flag) {
if(CreateList(L))
printf(“创建成功\n”);
flag = false;//避免第一次创建的没有删除完又创建
}
else if (c == 1 && !flag) {
printf(“已经创建,不能再创建!\n”);
}
else if (c == 2) {
int e=0;
int loc;
printf(“请输入获取第几个元素:”);
scanf_s("%d", &loc);
if(GetElem(L, loc,e))
printf(“获得的第%d个元素是:%d\n”, loc, e);
}
else if (c == 3) {
printf(“请输入要寻找位置的元素:”);
int e;
scanf_s("%d", &e);
if (LocateElem(L, e) != -1) {
printf(“元素%d在顺序表的第%d个位置\n”, e, LocateElem(L, e));
}
else {
printf(“顺序表不存在此元素\n”);
}
}
else if (c == 4) {
int e,loc;
printf(“请输入要插入的元素:”);
scanf_s("%d", &e);
printf(“请输入要插入的位置:”);
scanf_s("%d", &loc);
if (ListInsert_Sq(L, loc, e))
printf(“第%d位置插入%d成功!\n”, loc, e);
}
else if (c == 5) {
int loc,e=0;
printf(“请输入要删除的位置:”);
scanf_s("%d", &loc);
if(ListDelete_Sq(L, loc, e))
printf(“删除的第%d位置的元素为%d\n”, loc,e);
if(L.length==0) {
flag = true;//删除完毕,可以继续创建顺序表了
}
}
else if (c == -1)//退出操作
{
printf(“退出顺序表的操作!\n”);
break;
}
print(L);//每次操作后显示顺序表的数据
}
system(“pause”);//暂停操作

}

运行结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结:顺序表多用于很少插入和删除线性表中,其时间复杂度为O(n),下节我们将展示链表之单链表的操作,本文有错之处望大家多多指正。

有问题可以联系本人qq:1359266354(吴先生)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fighting的码农(zg)-GPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值