顺序表的建立和增删改查

C语言版顺序表的建立和增删改查

来自数据结构C语言第二版中顺序表的建立和增删改查
文章内容:顺序表的建立, 取值, 查找, 修改,插入, 删除。

二、使用步骤

1.引入库

代码如下(示例):

#include<stdio.h>			//调用基本输入/输出库文件
#include<stdlib.h>          //调用标准库头文件,malloc函数在这个头文件中
#include<process.h>			//使用系统库文件,暂停一下,看到执行结果

最后的代码

核心思想:插入和删除,在顺序表中,只需要将批量移动便可完成, 只不过是前移和后移的问题。作用:解决了数组的固定长度,和不能插入和删除操作的弊端。

顺序表的构建

// 顺序表的构建
#include<stdio.h>
#include<stdlib.h>         //malloc函数在这个头文件库中
#include<process.h>        //这个是系统暂停所用
#define MAX 100  //顺序表最大长度

typedef struct Seq
{
	int elem[MAX];		  //数组元素
	int length;          //长度
}RSeq;

//构建一个顺序表
RSeq init()
{
	RSeq *R1;
	R1 = (struct Seq*)malloc(sizeof(struct Seq));
	R1->length = 0;
	for (int i = 0; i < 10; i++)
	{
		R1->elem[i] = i + 1;
		R1->length++;
	}
	return *R1;
}

//取值
int Seq_getValue(RSeq R, int index)
{
	if (index < 0 && index > R.length)
	{
		printf("位置不合法");
		exit(0);
	}
	return R.elem[index];
}

//查找
int Seq_locateElem(RSeq R, int elem)
{
	int flag = 0;
	for (int i = 0; i < R.length; i++)     //顺序查找,遍历顺序表便可
	{
		if (R.elem[i] == elem)
		{
			return i;
		}
	}
	return -1;   //查找失败
}

//插入
void Seq_insert(RSeq* L, int index, int elem)
{
	if (index < 0 && index > L->length)
	{
		printf("位置不合法");	
		exit(0);
	}
	else {
		for (int i = L->length - 1; i >= index; i--)
			L->elem[i + 1] = L->elem[i];		
			//增加一个空位置往后移动,在index后面
		L->elem[index] = elem;
		L->length++;
	}
}

//修改
void Seq_revise(RSeq *L, int index, int value)
{
	if (index < 0 && index > L->length)
	{
		printf("位置不合法");
		exit(0);
	}
	else
	{
		L->elem[index] = value;
	}
}

//删除
void Seq_delete(RSeq* L, int k)           //k是删除的位置
{
	if (k < 0 && k > L->length)
	{
		printf("位置不合法");
		exit(0);
	}
	else
	{
		for (int i = k; i <= L->length - 1; i++)
			L->elem[i] = L->elem[i+1];      //前移补全空缺

		L->length--;
	}
}

//打印结果
void display(RSeq R)
{
	for (int i = 0; i < R.length; i++)
	{
		printf("%4d", R.elem[i]);
	}
}
int main()
{
	RSeq A;
	A = init();       //构造一个顺序表
	printf("最原始的顺序表:");
	display(A);
	printf("\n");
	printf("顺序表取值:%d\n",Seq_getValue(A, 2));
	printf("顺序表查找值为7的下标:%d\n", Seq_locateElem(A,7));
	printf("顺序表插入之后的顺序表:");
	Seq_insert(&A, 4, 13);
	display(A);
	printf("\n顺序表修改下标为2的值之后的顺序表:");
	Seq_revise(&A, 2, 11);
	display(A);
	printf("\n顺序表删除下标为2和4的值之后的顺序表:");
	Seq_delete(&A, 2);
	Seq_delete(&A, 3);       
	//删除一个之后表长减一, 上一次删除之后的下标会受到影响,前面则不会。
	display(A);
	system("pause");
	return 0;
}


/*结果为:
最原始的顺序表:   
1   2   3   4   5   6   7   8   9  10
顺序表取值:3
顺序表查找值为7的下标:6
顺序表插入之后的顺序表:  
 1   2   3   4  13   5   6   7   8   9  10
顺序表修改下标为2的值之后的顺序表:   
1   2  11   4  13   5   6   7   8   9  10
顺序表删除下标为2和4的值之后的顺序表:   
1   2   4   5   6   7   8   9  10
*/
  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值