顺序表的习题

文章目录

  • 一、题目
  • 二、源代码
  • 三、运行结果
  • 总结

一、题目

题目:实现顺序表各种基本运算的算法
要求:
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;
}

三、运行结果

顺序表的习题_第1张图片

总结

努力是最好的天赋,所以行动起来吧!

如果觉得浩克写的还不错的话,记得关注浩克奥,我们一起努力!
顺序表的习题_第2张图片

你可能感兴趣的:(数据结构,c语言,算法,数据结构)