实现顺序表基础功能,增删改查插,可选目标值插入和目标位置插入/删除,未增加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;
}
}