#include <stdio.h>
#include <stdlib.h>
#define MAX 100
//数组表示--静态分配
typedef struct {
int arr[MAX];
int length;//实际长度
}Sqlist01;
//指针表示--动态分配
typedef struct {
int*ptr;
int length;//实际长度
}Sqlist02;
//创建顺序表
int initSqlist(Sqlist02& sqList)
{
sqList.ptr = (int*)malloc(sizeof(int) * MAX);
sqList.length = 0;
return !sqList.ptr ? -1 : 0;
}
//添加元素
int addElem(Sqlist02& sqList, int pos, int e) {
if (pos < 0 || pos > sqList.length || sqList.length >= MAX) {
return -1;
}
for (int i = sqList.length; i > pos; i--) {
sqList.ptr[i] = sqList.ptr[i - 1];
}
sqList.ptr[pos] = e;
sqList.length++;
return 0;
}
//删除元素
int delElem(Sqlist02& sqList, int pos, int &e)
{
if (pos < 0 || pos >= sqList.length) {
return -1;
}
e = sqList.ptr[pos];
for (int i = pos+1; i <=sqList.length-1; i++) {
sqList.ptr[i-1] = sqList.ptr[i];
}
sqList.length--;
return 0;
}
//修改元素
int updateElem(Sqlist02& sqList, int pos, int e)
{
if (pos < 0 || pos >= sqList.length) {
return -1;
}
sqList.ptr[pos] = e;
return 0;
}
//查找元素--根据元素查找下标
int findElem_e(Sqlist02 sqList, int e)
{
for (int i = 0; i <= sqList.length - 1; i++) {
if (e == sqList.ptr[i])
{
return i;
}
}
return -1;
}
//查找元素--根据下标查找下元素
int findElem_pos(Sqlist02 sqList, int pos)
{
if (pos < 0 || pos >= sqList.length) {
return -1;
}
return sqList.ptr[pos];
}
int getLength(Sqlist02 sqList)
{
return sqList.length;
}
//打印顺序表
void printSqlist(Sqlist02 sqList)
{
for (int i = 0; i < sqList.length; i++)
{
printf("%d ", sqList.ptr[i]);
}
printf("\n");
}
//销毁
void destroy(Sqlist02& sqList)
{
if (sqList.ptr)
{
delete[] sqList.ptr;
}
}
int main()
{
Sqlist02 sqList;
initSqlist(sqList);
//插入
for (int i = 0; i < 10; i++)
{
if (addElem(sqList, i, i+1)==-1)
{
printf("第%d个数插入失败!!!\n", i);
}
else
{
printf("第%d个位置插入%d成功\n", i, i + 1);
}
}
//删除
int e;
if (delElem(sqList, 3, e) == 0)
{
printf("删除成功,e=%d\n", e);
}
else
{
printf("删除失败\n");
}
//根据下标查找
if (findElem_pos(sqList, 5) != -1)
{
printf("下标5对应值为%d\n", findElem_pos(sqList, 5));
}
else
{
printf("查找失败\n");
}
//根据值查找
if (findElem_e(sqList, 5) != -1)
{
printf("5对应下标值为%d\n", findElem_e(sqList, 5));
}
else
{
printf("查找失败\n");
}
//修改
if (updateElem(sqList, 5, 10) != -1)
{
printf("修改成功\n");
}
else
{
printf("修改失败\n");
}
//打印
printSqlist(sqList);
printf("当前顺序表长度是%d\n", getLength(sqList));
}
线性表--顺序表的增删查改
于 2023-11-12 20:49:29 首次发布