c语⾔创建空顺序表的程序,C语⾔实现顺序表的创建与增删改
查操作
SqListDemo.c
/* 线性表的顺序存储实现 */
#include
#include
#include
// 定义符号常量
#define LIST_INIT_SIZE 50
#define LISTINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
// 定义元素类型
typedef int ElemType;
// 定义顺序表类型
typedef struct {
ElemType *elem; // 顺序表元素
int length; // 顺序表长度
int listsize; // 顺序表存储容量
} SqList;
// 构造空顺序表
int InitList(SqList *L)
{
// 获取顺序表基址
L->elem = (ElemType *) malloc(sizeof(ElemType));
// 存储空间分配失败
if (!L->elem) return ERROR;
// 空表长度为0
L->length = 0;
// 分配给空表的存储容量
L->listsize = LIST_INIT_SIZE;
// 初始化成功
return OK;
}
// 获取顺序表第i个元素
ElemType GetListElem(SqList *L, int i)
{
// 检查i的合法性
if (i < 1 || i > L->length)
return ERROR;
else
return L->elem[i-1];
}
/
/ 定位⽬标元素在顺序表中位置
int LocateListElem(SqList *L, ElemType e)
{
int i = 1;
// 定义指针p,指向第⼀个元素
ElemType *p = L->elem;
// ⽬标元素依次与顺序表元素⽐较
while (*p != e && i <= L->length)
{
i++;
p++;
}
if (i > L->length)
return 0;
else
return i;
}
// 在顺序表第i个位置插⼊元素
int InsertListElem(SqList *L, int i, ElemType e) {
int k;
// 位置合法性判断
if (i < 1 || i > L->length + 1) return ERROR;
/
/ 顺序表空间满,按增量重新分配
if (L->length >= L->listsize)
{
// 增加LISTINCREMENT个元素元素,获取顺序表新基址
L->elem = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if (!L->elem) return ERROR;
// 按增量修改存储空间⼤⼩
L->listsize += LISTINCREMENT;
}
// 元素后移1位
for (k = L->length - 1; k >= i - 1; k--)
L->elem[k + 1] = L->elem[k];
// 插⼊元素
L->elem[i-1] = e;
// 顺序表长度加1
L->length++;
// 插⼊成功
return OK;
}
// 删除顺序表第i个元素
int DeleteListElem(SqList *L, int i)
{
int k;
/
/ 判断位置合法性
if (i < 1 || i >L->length) return ERROR;
// 元素前移1位
for (k = i; k <= L->length; k++)
L->elem[k-1] = L->elem[k];
// 顺序表长度减1
L->length--;
// 删除成功
return OK;
}
// 修改顺序表第i个元素
int UpdateListElem(SqList *L, int i, ElemType e) {
// 判断位置合法性
if (i < 1 || i >L->length) return ERROR;
// 修改第i个元素值
L->elem[i-1] = e;
// 修改成功
return OK;
}
// 输出顺序表全部元素
void PrintList(SqList *L)
{
int i;
if (L->length == 0)
printf("\n顺序表为空!\n\n");
else
for (i = 1; i <= L->length; i++)
printf("%d ", L->elem[i-1]);
printf("\n");
}
int main()
{
int i, choice, position;
ElemType data, elem;
int isRunning = 1;
SqList *pl = (SqList *)malloc(sizeof(SqList)); while(isRunning)
{
printf("======顺序表操作演⽰=======\n"); printf("1. 创建⼀个空的顺序表\n");
printf("2. 输出顺序表的全部数据\n");
printf("3. 查询顺序表某个位置的数据\n");
printf("4. 查询数据在顺序表中的位置\n");
printf("5. 向顺序表指定位置插⼊数据\n");
printf("6. 删除顺序表指定位置的数据\n");
printf("7. 更新顺序表指定位置的数据\n");
printf("8. 退出顺序表操作演⽰程序\n");
printf("===========================\n"); printf("\n输⼊1-8,选择所需功能号:");
scanf("%d", &choice);
printf("\n您选择的功能号为:%d\n", choice);
switch(choice)
c语言listinsert函数{
case 1:
if (InitList(pl))
printf("\n顺序表创建成功!\n\n");
else
printf("\n顺序表创建失败!\n\n");
system("pause");
break;
case 2:
PrintList(pl);
system("pause");
break;
case 3:
printf("i=");
scanf("%d", &i);
elem = GetListElem(pl, i);
if (elem)
printf("L[%d]=%d\n\n", i, elem);
else
printf("输⼊的位置不合法!");
system("pause");
break;
case 4:
printf("data=");
scanf("%d", &data);
position = LocateListElem(pl, data);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论