- 一、题目
- 二、源代码
- 三、运行结果
- 总结
二、源代码题目:实现顺序表各种基本运算的算法
要求:
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
6、将线性表中的元素就地逆序(只允许用一个暂存单元);
为了方便大家食用,直接讲代码放出来,大家可以直接复制去运行的试一下。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef int SLType;
typedef struct seqlist
{
SLType* a;
int size;
int capicity;
}SL;
SL sl;
//线性表的初始化
void SLinit(SL* ps)
{
assert(ps);
ps->a = NULL;
ps->capicity = ps->size = 0;
}
//开辟空间
void SLcapicity(SL* ps)
{
assert(ps);
if (ps->size == ps->capicity)
{
int newcapicity = ps->capicity == 0 ? 4 : ps->capicity * 2;
int* tmp = (int*)realloc(ps->a, newcapicity * sizeof(SLType));
if (tmp == NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->a = tmp;
ps->capicity = newcapicity;
}
}
//输入元素
SL_scanf(SL* ps)
{
assert(ps);
printf("请输入你要输入几个元素\n");
int n;
scanf("%d", &n);
printf("请输入%d个元素\n", n);
for (int i = 0; i < n; i++)
{
SLcapicity(&sl);
scanf("%d", &(ps->a[i]));
ps->size++;
ps->capicity++;
}
}
//打印顺序表
void SLprint(SL*ps)
{
assert(ps);
int i = 0;
for (int i = 0; i < ps->size; i++)
{
printf("%d ", ps->a[i]);
}
printf("\n");
}
//查找线性表中的最大元素并输出
int SLmax(SL* ps)
{
assert(ps);
int max = ps->a[0];
for (int i = 1; i < ps->size; i++)
{
if (ps->a[i] > max)
{
max = ps->a[i];
}
}
return max;
}
//在线性表的第i个元素前插入一个正整数x
void SLinsert(SL* ps,int i, SLType x)
{
assert(ps);
assert(i > 0 && i <= ps->size);
int end = ps->size;
while (i <= end)
{
ps->a[end] = ps->a[end - 1];
end--;
}
ps->a[i - 1] = x;
ps->size++;
}
//删除线性表中的第j个元素
void SLdelete(SL* ps, int j)
{
assert(ps);
assert(j > 0 && j <= ps->size);
while (j - 1 <= ps->size)
{
ps->a[j - 1] = ps->a[j];
j++;
}
ps->size--;
}
//对顺序表的元素进行排序
void SLsort(SL* ps)
{
assert(ps);
for (int j = 0; j < ps->size - 1; j++)
{
for (int i = 0; i < ps->size - 1-j; i++)
{
if (ps->a[i] > ps->a[i + 1])
{
int tmp = 0;
tmp = ps->a[i];
ps->a[i] = ps->a[i + 1];
ps->a[i + 1] = tmp;
}
}
}
}
//逆序线性表
void SLreserve(SL* ps)
{
int* left = ps->a;
int* right = ps->a + ps->size - 1;
while (left < right)
{
int tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
//测试
void test()
{
//初始化线性表
SLinit(&sl);
//开辟空间
SLcapicity(&sl);
//输入元素
SL_scanf(&sl);
//打印顺序表
SLprint(&sl);
//查找最大的值
int max=SLmax(&sl);
printf("最大的值是%d\n", max);
//在线性表的第i个元素前插入一个正整数x
printf("请输入你要在哪个位置前插入什么元素\n");
int x,i;
scanf("%d%d",&i, &x);
SLinsert(&sl,i,x);
//打印顺序表
SLprint(&sl);
//删除线性表中的第j个元素
int j;
printf("请输入你要删除哪个位置的元素\n");
scanf("%d", &j);
SLdelete(&sl, j);
//打印顺序表
SLprint(&sl);
//将线性表中的元素按升序排列
SLsort(&sl);
//打印顺序表
printf("按照从小到大排列\n");
SLprint(&sl);
//将线性表中的元素就地逆序(只允许用一个暂存单元)
SLreserve(&sl);
//打印顺序表
printf("逆序后的结果是\n");
SLprint(&sl);
}
int main()
{
test();
return 0;
}
三、运行结果
总结
努力是最好的天赋,所以行动起来吧!
如果觉得浩克写的还不错的话,记得关注浩克奥,我们一起努力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)