数据结构-顺序表程序分析
Posted 坏坏-5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-顺序表程序分析相关的知识,希望对你有一定的参考价值。
- 参考书籍《数据结构 实用C语言》【第5版】-朱战力
主函数
int main(void)
{
Seqlist mylist; //定义顺序表
int i, x;
ListInitiate(&mylist); //对顺序表进行初始化
// 对顺序表进行赋值
for (i = 0; i < 10; i++)
ListInsert(&mylist, i, i+1);
// 对顺序表中的元素进行遍历输出
for(i = 0; i < ListLength(mylist); i++)
{
ListGet(mylist, i, &x);
printf("%-2d ", x);
}
printf("\\n");
// 删除顺序表中第5个位置的元素
ListDelete(&mylist, 5, &x);
// 对删除第5个元素后的顺序表进行遍历
for(i = 0; i < ListLength(mylist); i++)
{
ListGet(mylist, i, &x);
printf("%-2d ", x);
}
printf("\\n");
return 0;
}
定义结构体
/*定义结构体Seqlist*/
typedef struct
{
DataType list[MaxSize]; //定义数组元素类型及数组元素最大个数
int size; //顺序表中当前存储数据元素个数
}Seqlist;
- 顺序表的存储
初始化
/*顺序表的初始化*/
void ListInitiate(Seqlist * L) //初始化顺序表L
{
L->size = 0; //定义初始化数据元素个数
}
顺序表的元素个数
/*顺序表当前数据元素个数*/
int ListLength(Seqlist L)
{
return L.size; //返回顺序表L的当前数据元素个数
}
插入元素
/*顺序表插入数据元素*/
int ListInsert(Seqlist * L, int i, DataType x)
// 在顺序表的第i(0<=i<=size)个位置插入数据元素的值x
// 插入成功返回1,插入失败返回0
{
int j;
// 判断顺序表是否已满
if (L->size >= MaxSize)
{
printf("顺序表已满!无法插入!\\n");
return 0;
}
// 判断插入的位置是否合法
else if (i < 0 || i > L->size)
{
printf("参数i不合法!\\n");
return 0;
}
// 插入元素
else
{
// 将第j-1位置的元素移动到j的位置
for(j = L->size; j > i; j--)
L->list[j] = L->list[j-1];
// 在第i个位置,插入元素x,并把顺序表当前存储的元素个数+1
L->list[i] = x;
L->size ++;
return 1;
}
}
- 插入元素过程
删除元素
/*顺序表删除数据元素*/
int ListDelete(Seqlist * L, int i, DataType * x)
// 删除顺序表L中第i(0<=i<=size-1)个位置的元素,并保存到x中
// 删除成功返回1,删除失败返回0
{
int j;
// 判断顺序表是否已空
if (L->size <= 0)
{
printf("顺序表已空!\\n");
return 0;
}
// 判断删除的位置是否合法
else if (i < 0 || i > L->size - 1)
{
printf("参数i不合法!\\n");
return 0;
}
// 删除元素
else
{
*x = L->list[i]; //将删除的元素保存至x中
// 将删除元素的下一个元素向前移动
for(j = i + 1; j <= L->size - 1; j++)
L->list[j-1] = L->list[j];
// 将顺序表中存放的元素个数-1
L->size --;
return 1;
}
}
- 删除元素过程
取出元素
/*取出数据元素*/
int ListGet(Seqlist L, int i, DataType * x)
{
// 判断取出的位置是否合法
if (i < 0 || i > L.size - 1)
{
printf("参数i不合法!\\n");
return 0;
}
// 取出元素
else
{
*x = L.list[i];
return 1;
}
}
完整程序
/*
顺序表的操作
*/
# include <stdio.h>
# define MaxSize 100 //定义MaxSize为100
typedef int DataType; //定义别名
/*定义结构体Seqlist*/
typedef struct
{
DataType list[MaxSize]; //定义数组元素类型及数组元素最大个数
int size; //顺序表中当前存储数据元素个数
}Seqlist;
/*顺序表的初始化*/
void ListInitiate(Seqlist * L) //初始化顺序表L
{
L->size = 0; //定义初始化数据元素个数
}
/*顺序表当前数据元素个数*/
int ListLength(Seqlist L)
{
return L.size; //返回顺序表L的当前数据元素个数
}
/*顺序表插入数据元素*/
int ListInsert(Seqlist * L, int i, DataType x)
// 在顺序表的第i(0<=i<=size)个位置插入数据元素的值x
// 插入成功返回1,插入失败返回0
{
int j;
// 判断顺序表是否已满
if (L->size >= MaxSize)
{
printf("顺序表已满!无法插入!\\n");
return 0;
}
// 判断插入的位置是否合法
else if (i < 0 || i > L->size)
{
printf("参数i不合法!\\n");
return 0;
}
// 插入元素
else
{
// 将第j-1位置的元素移动到j的位置
for(j = L->size; j > i; j--)
L->list[j] = L->list[j-1];
// 在第i个位置,插入元素x,并把顺序表当前存储的元素个数+1
L->list[i] = x;
L->size ++;
return 1;
}
}
/*顺序表删除数据元素*/
int ListDelete(Seqlist * L, int i, DataType * x)
// 删除顺序表L中第i(0<=i<=size-1)个位置的元素,并保存到x中
// 删除成功返回1,删除失败返回0
{
int j;
// 判断顺序表是否已空
if (L->size <= 0)
{
printf("顺序表已空!\\n");
return 0;
}
// 判断删除的位置是否合法
else if (i < 0 || i > L->size - 1)
{
printf("参数i不合法!\\n");
return 0;
}
// 删除元素
else
{
*x = L->list[i]; //将删除的元素保存至x中
// 将删除元素的下一个元素向前移动
for(j = i + 1; j <= L->size - 1; j++)
L->list[j-1] = L->list[j];
// 将顺序表中存放的元素个数-1
L->size --;
return 1;
}
}
/*取出数据元素*/
int ListGet(Seqlist L, int i, DataType * x)
{
// 判断取出的位置是否合法
if (i < 0 || i > L.size - 1)
{
printf("参数i不合法!\\n");
return 0;
}
// 取出元素
else
{
*x = L.list[i];
return 1;
}
}
int main(void)
{
Seqlist mylist; //定义顺序表
int i, x;
ListInitiate(&mylist); //对顺序表进行初始化
// 对顺序表进行赋值
for (i = 0; i < 10; i++)
ListInsert(&mylist, i, i+1);
// 对顺序表中的元素进行遍历输出
for(i = 0; i < ListLength(mylist); i++)
{
ListGet(mylist, i, &x);
printf("%-2d ", x);
}
printf("\\n");
// 删除顺序表中第5个位置的元素
ListDelete(&mylist, 5, &x);
// 对删除第5个元素后的顺序表进行遍历
for(i = 0; i < ListLength(mylist); i++)
{
ListGet(mylist, i, &x);
printf("%-2d ", x);
}
printf("\\n");
return 0;
}
/*运行结果*/
-------------------------------
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 7 8 9 10
Press any key to continue . . .
-------------------------------
以上内容均属原创,如有不详或错误,敬请指出。
本文链接: https://blog.csdn.net/qq_45668124/article/details/117665467
版权声明: 本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0 许可协议。转载请联系作者注明出处并附带本文链接!
以上是关于数据结构-顺序表程序分析的主要内容,如果未能解决你的问题,请参考以下文章