PS:如果手机显示不完可以用电脑查看
#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
#define list_init_size 100 //线性表存储空间的初始分配量
#define listincrement 10 //增加内存空间时的增量
typedef int status;
typedef int elemtype;
typedef struct {
elemtype *elem; //基址
int length; //长度 (元素的个数)
int listsize; //当前分配的存储容量
}sqlist;
status initlist_sq(sqlist &l)//初始化线性表
{
l.elem = (elemtype*)malloc(list_init_size*sizeof(elemtype));
if (!l.elem)
return error;//初始化失败
l.length = 0;//置空表
l.listsize = list_init_size;//线性表的最大存储容量
return ok;//初始化成功,返回1
}
status crealist_sq(sqlist &l, int n)
{
if (n<0 || n>l.listsize)
return error;//输入的长度过大或者过小
int i = 0;
for (i = 0; i < n; i++)
{
scanf_s("%d", &l.elem[i]);
l.length++;
}
return ok;
}
status listinsert_sq(sqlist &l, int i, elemtype e)//插入元素
{
int j;
if (i<1 || i>l.length + 1)
return error; // i 值不合法
if (l.length == l.listsize)
{
l.elem = (elemtype*)malloc(listincrement*sizeof(elemtype));//增加内存空间
if (!l.elem) return error; //空间分配失败
l.listsize = l.listsize + listincrement;
};
for (j = l.length - 1; j >= i - 1; j--)
l.elem[j + 1] = l.elem[j]; // 第l.length~i的元素依次后移
l.elem[i - 1] = e;//在i-1的位置插入元素e
++l.length; // 表长增1
return ok;
}//listinsert_sq
status print_sq(sqlist l)//遍历输出线性表l中的所有元素
{
if (!l.elem)
return error;
int i = 0, j;
for (i = 0, j = 1; i <l.length; i++, j++)
printf("第%d个元素=%d\n", j, l.elem[i]);//数组的输出
return ok;//遍历成功
}
status listdelete_sq(sqlist &l, int i, elemtype &e)//删除线性表l中的第i个元素
{
int k;
if (i<1 || i>l.length)
return error;//删除的位置不合法
e = l.elem[i - 1];
for (k = i - 1; k< l.length - 1; k++)
l.elem[k] = l.elem[k + 1];//从i到l.length-1的全部元素都要往前移一位
l.length--;//长度减1
return ok;//删除成功
}
int locateelem_sq(sqlist l, elemtype e)//在线性表中查找第一个与e相等的元素的位置
{
int i;
for (i = 0; i < l.length; i++)
{
if (l.elem[i] == e)
return (i + 1);//查找到了则返回位置第i+1;
}
return error;//没有查找到元素e,查找失败
}
status listempty_sq(sqlist l)//判断sqlist是否为空
{
if (l.length >0)
return error;//不是空表,返回error
else
return ok;//是空表,返回ok
}
status freelist_sq(sqlist &l)
{
if (!l.elem)
return error;//如果已经是空表,则返回erro
else
free(l.elem);
return ok;//销毁成功
}
status clearlist_sq(sqlist &l)//将sqlist置为空表
{
l.length = 0;
return ok;
}
status priorelem_sq(sqlist l, elemtype cur_e, elemtype &pre_e)//求cur_e的前驱,用pre_ef返回
{
if (l.elem[0] == cur_e)
return error;//第一个数据元素无前驱
int i = 0;
for (i = 1; i < l.length; i++)
{
if (l.elem[i] == cur_e)
{
pre_e = l.elem[i - 1];//pre_e为cur_e的前驱
return ok;
}
}
return error;//线性表中没有cur_e元素
}
status nextelem_sq(sqlist l, elemtype cur_e, elemtype &next_e)
{
if (l.elem[l.length - 1] == cur_e)
return error;//sqlist中的最后一个元素无后继;
int i = 0;
for (i = 0; i < l.length - 1; i++)
{
if (l.elem[i] == cur_e)
{
next_e = l.elem[i + 1];//返回cur的后一个元素
return ok;
}
}
return error;//sqlis中没有cur_e元素;
}
int listlength_sq(sqlist l)
{
return (l.length);
}
status getelem_sq(sqlist l, int i, elemtype &e)
{
if (i<1 || i>l.length)
return error;//长度不合理
e = l.elem[i - 1];
return ok;//返回成功
}
int main()
{
sqlist l;
int i;
elemtype e,m;
if (ok == initlist_sq(l))
printf("顺序表创建成功!\n");
else
printf("顺序表创建失败!\n");
printf("请输入5个数字:");
crealist_sq(l, 5);
printf("原本的序列为:\n");
print_sq(l);
printf("在第二个位置插入元素99后的序列为:\n");
listinsert_sq(l, 2, 99);
print_sq(l);
printf("此时线性表的长度为%d:\n", listlength_sq(l));
printf("删除线性表中第二个元素后的序列为:\n");
listdelete_sq(l, 2, e);
print_sq(l);
getelem_sq(l, 4, m);
i = locateelem_sq(l, m);
if (i)
printf("%d是这个顺序表中的第%d个元素\n", m,i);
else
printf("顺序表中无此元素!\n");
if (priorelem_sq(l, m, e))
printf("%d的前驱为:%d\n",m, e);
else
printf("%d无前驱\n",m);
if (nextelem_sq(l, m, e))
printf("%d的后继为:%d\n", m, e);
else
printf("%d无后继!\n", m);
if (freelist_sq(l))
printf("顺序表销毁成功!\n");
else
printf("顺序表销毁失败!\n");
clearlist_sq(l);
if (listempty_sq(l))
printf("此时的表是空表!\n");
else
printf("此时的表不是空表!\n");
system("pause");
return 0;
}