顺序表基础例子

这篇博客详细介绍了如何使用C++和C语言实现顺序表的基本功能,包括增、删、改、查以及选择性地在特定值或位置进行插入和删除操作。虽然没有涵盖内存分配后的NULL检查,但提供了顺序表操作的基础实现。
摘要由CSDN通过智能技术生成

实现顺序表基础功能,增删改查插,可选目标值插入和目标位置插入/删除,未增加malloc后的NULL检查

#include <stdio.h>
#include <malloc.h>
#define _POS_WISE 0
#define _VAL_WISE 1


typedef struct Sqe{
	int * pelem;
	int size;
	int valid_data;	

}sqe, *psqe;

void init_sqe(psqe p_sqe,int size_f);
//init sqe, size_f is total length of seq,valid data in sqe is zero;

void sqe_apd(psqe p_sqe, int val_f);
//add one data in sqe's tail 

void sqe_inst(psqe p_sqe, int method, int val_f, int val_new);
//insert one data in sqe ,if _POS_WISE,input position to insert,else if _VAL_WISE, input value to insert

int sqe_srh(psqe p_sqe, int val_f);
//search the value (val_f) you input and return position of that value ,position start from 1;

void sqe_show(psqe p_sqe);
//show all valid data , position start from 1;

void sqe_rep(psqe p_sqe, int val_f, int val_new,int method);
//replace data ,if _VOL_WISE, replace the first data in sqe that match your input, if _POS_WISE,replace the data in position you input

void sqe_del(psqe p_sqe, int val_f,int method);
//delet data ,if _VAL_WISE, delete the first data in sqe that match your input, if _POS_WISE,delete the data in position you input;

int main(void){
	sqe sqe_f;
	psqe p_sqe = & sqe_f;
	int size_f;
	int i =0;
	int val_f = 0;
	int val_new = 0;



	printf("input sizeof sqe:\n");
	scanf("%d",&size_f);
	init_sqe(p_sqe,size_f);

	
	printf("input val to apd:\n");
	scanf("%d",&i);
	sqe_apd(p_sqe,i);
	sqe_apd(p_sqe,2);
	sqe_apd(p_sqe,3);
	// sqe_apd(p_sqe,4);
	// sqe_apd(p_sqe,6);
	// sqe_apd(p_sqe,6);
	for(i = 0; i<p_sqe->valid_data; i++){
		printf("sub: %d    val:%d\n",i, p_sqe->pelem[i]);
	}

	printf("input pos, val_new ,to insert\n");


	scanf("%d%d", &val_f, &val_new);
	sqe_inst(p_sqe,_POS_WISE, val_f,val_new);
	for(i = 0; i<p_sqe->valid_data; i++){
		printf("sub: %d    val:%d\n",i, p_sqe->pelem[i]);
	}

	sqe_show(p_sqe);
	printf("input val_f, val_new,to replace\n");
	scanf("%d%d", &val_f, &val_new);


	sqe_rep(p_sqe, val_f,val_new,_POS_WISE);
	sqe_show(p_sqe);

	printf("input val_f,delete\n");
	scanf("%d", &val_f);
    sqe_del(p_sqe, val_f,_POS_WISE);
    sqe_show(p_sqe);

	return 0;
}

void init_sqe(psqe  p_sqe,int size_f){//init
	(p_sqe)->pelem = (int *)malloc(sizeof(int)*size_f);
	(p_sqe)->size = size_f;
	(p_sqe)->valid_data = 0;
	int i = 0;
	for(i=0; i<p_sqe->valid_data; i++){
		(p_sqe)->pelem[i] = 0;
	}
	printf("Init_done\n");
}


void sqe_inst(psqe p_sqe, int method, int val_f, int val_new)	{//insert
	

	if(_VAL_WISE == method){

		val_f = sqe_srh(p_sqe, val_f);
		method = _POS_WISE;

	}

	if(_POS_WISE == method){

		if(val_f > p_sqe->valid_data-1){
			printf("can not insert here,try smaller pos\n");

		}
		p_sqe->pelem = (int *)realloc(p_sqe->pelem, sizeof(int )*(p_sqe->size+1));
		p_sqe->size++;
		int i = 0;
		for(i = p_sqe->valid_data; i>=val_f; i--){//1 2 3 4 _

			printf("ininin\n");
			p_sqe->pelem[i] = p_sqe->pelem[i-1];
		}
		p_sqe->pelem[val_f-1] = val_new;
		p_sqe->valid_data++;
		printf("insert one val pos_wise done\n");
	}
}


void sqe_apd(psqe p_sqe, int val_f){//append
	
	if(p_sqe->valid_data == p_sqe->size){
		p_sqe->pelem = (int *)realloc(p_sqe->pelem, sizeof(int )*(p_sqe->size+1));
		p_sqe->size++;
	}
	p_sqe->pelem[p_sqe->valid_data] = val_f;
	p_sqe->valid_data++;
	printf("append one val done\n");
	printf("valid_data:%d,size:%d,\n",p_sqe->valid_data, p_sqe->size  );
}

void sqe_show(psqe p_sqe){//show
	int i = 0;

	while(i < p_sqe->valid_data){
		printf("pos:  %d  val:  %d\n",i+1,p_sqe->pelem[i] );
		i++;
	}
	if (p_sqe->valid_data == 0)printf("sqe empty ,apd first\n");

}

void sqe_del(psqe p_sqe, int val_f,int method){//delete
	if (method == _VAL_WISE){
		val_f = sqe_srh(p_sqe,val_f);
		method = _POS_WISE;
	}

	if (method == _POS_WISE){//1 2 3 4
		int i = 0;
		for(i = val_f-1; i<p_sqe->valid_data;i++){
			p_sqe->pelem[i] = p_sqe->pelem[i+1];
		}
		p_sqe->valid_data--;
	}

}

int sqe_srh(psqe p_sqe, int val_f){//search
	int i = 0;
	for(i = 0; i <p_sqe->valid_data; i++){
		if(p_sqe->pelem[i] == val_f){
			return i+1;
		}
		
	}
	printf("no such val\n");
	return -1;
}

void sqe_rep(psqe p_sqe, int val_f, int val_new,int method){//replace

	
	if(_VAL_WISE == method){
		val_f = sqe_srh(p_sqe,val_f);
		method = _POS_WISE;
	}

	if(_POS_WISE == method){
		if(val_f > p_sqe->valid_data){
			printf("not a valid data pos\n");
			return;
		}
		p_sqe->pelem[val_f-1] = val_new;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值