seq_list.h
#ifndef _seq_list_h
#define _seq_list_h
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 10
typedef struct abc{
int data;
}data_t;
typedef struct stt{
data_t s[N];
int count;
}seq_list;
void seqlist_create(seq_list **my_list);
void seqlist_tail_add(seq_list *my_list,int data);
void seqlist_print(seq_list *my_list);
void seqlist_pos_add(seq_list *my_list,int data,int pos);
void seqlist_tail_del(seq_list *my_list);
void seqlist_pos_del(seq_list *my_list,int pos);
void seqlist_val_chg(seq_list *my_list,int oldval,int newval);
void seqlist_pos_val_chg(seq_list *my_list,int pos,int val);
int seqlist_pos_search(seq_list *my_list,int pos);
void seqlist_sort(seq_list *my_list);
void seqlist_solo(seq_list *my_list);
void seqlist_clr(seq_list *my_list);
void seqlist_destroy(seq_list **my_list);
#endif
seq_list.c
#include "seq_list.h"
void seqlist_create(seq_list **my_list){
*my_list=(seq_list *)malloc(sizeof(seq_list));
memset(*my_list,0,sizeof(seq_list));
}
void seqlist_tail_add(seq_list *my_list,int data){
if(my_list->count>=N){
printf("表已满,插入失败\n");
return;
}
(my_list->s[my_list->count]).data=data;
(my_list->count)++;
}
void seqlist_print(seq_list *my_list){
for(int i=0;i<my_list->count;i++){
printf("%d ",my_list->s[i].data);
}
putchar('\n');
}
void seqlist_pos_add(seq_list *my_list,int data,int pos){
if(my_list->count>=N){
printf("表已满,插入失败\n");
return;
}
if(pos<0||pos>my_list->count){
printf("插入位置有误,插入失败\n");
return;
}
if(my_list->count==pos){
seqlist_tail_add(my_list,data);
return;
}
for(int i=0;i<(my_list->count-pos);i++){
my_list->s[my_list->count-i].data=my_list->s[my_list->count-i-1].data;
}
my_list->s[pos].data=data;
(my_list->count)++;
}
void seqlist_tail_del(seq_list *my_list){
if(my_list->count==0){
printf("表已空,删除失败\n");
return;
}
(my_list->s[my_list->count]).data=0;
(my_list->count)--;
}
void seqlist_pos_del(seq_list *my_list,int pos){
if(my_list->count==0){
printf("表已空,删除失败\n");
return;
}
if(pos<0||pos>=my_list->count){
printf("删除位置有误,删除失败\n");
return;
}
for(int i=0;i<my_list->count-pos;i++){
my_list->s[pos+i].data=my_list->s[pos+1+i].data;
}
my_list->count--;
}
void seqlist_val_chg(seq_list *my_list,int oldval,int newval){
int flag=0;
for(int i=0;i<my_list->count;i++){
if(my_list->s[i].data==oldval){
my_list->s[i].data=newval;
flag++;
}
}
if(flag==0){
printf("%d不存在,修改失败\n",oldval);
}
}
void seqlist_pos_val_chg(seq_list *my_list,int pos,int val){
if(pos<0||pos>=my_list->count){
printf("修改位置有误,修改失败\n");
return;
}
my_list->s[pos].data=val;
}
int seqlist_pos_search(seq_list *my_list,int pos){
if(pos<0||pos>=my_list->count){
printf("查找位置有误,查找的值无效\n");
return -1;
}
return my_list->s[pos].data;
}
void seqlist_sort(seq_list *my_list){
int tmp=0;//3 4 2 1 6 7 5 0
for(int i=0;i<my_list->count-1;i++){
for(int j=0;j<my_list->count-1-i;j++){
if(my_list->s[j].data>my_list->s[j+1].data){
tmp=my_list->s[j].data;
my_list->s[j].data=my_list->s[j+1].data;
my_list->s[j+1].data=tmp;
}
}
}
printf("排序完成\n");
}
void seqlist_solo(seq_list *my_list){
for(int i=0;i<my_list->count;i++){
for(int j=i+1;j<my_list->count;j++){
if(my_list->s[i].data==my_list->s[j].data){
seqlist_pos_del(my_list,j);
my_list->count--;
j--;
}
}
}
}
void seqlist_clr(seq_list *my_list){
my_list->count=0;
}
void seqlist_destroy(seq_list **my_list){
free(*my_list);
*my_list==NULL;//指针还存在,防止野指针
}
main.c
#include "seq_list.h"
int main(int argc, const char *argv[]){
seq_list *my_list=NULL;
seqlist_create(&my_list);
seqlist_tail_add(my_list,5);
seqlist_tail_add(my_list,1);
seqlist_tail_add(my_list,4);
seqlist_tail_add(my_list,2);
seqlist_tail_add(my_list,3);
seqlist_print(my_list);// 5 1 4 2 3
seqlist_pos_add(my_list,0,4);
seqlist_print(my_list);//5 1 4 2 0 3
seqlist_tail_del(my_list);
seqlist_print(my_list);//5 1 4 2 0
seqlist_pos_del(my_list,1);
seqlist_print(my_list);//5 4 2 0
seqlist_val_chg(my_list,5,3);
seqlist_print(my_list);//3 4 2 0
seqlist_pos_val_chg(my_list,3,1);
seqlist_print(my_list);//3 4 2 1
int val=seqlist_pos_search(my_list,2);
printf("%d\n",val);//2
seqlist_tail_add(my_list,6);
seqlist_tail_add(my_list,7);
seqlist_tail_add(my_list,5);
seqlist_tail_add(my_list,0);
seqlist_print(my_list);//3 4 2 1 6 7 5 0
seqlist_sort(my_list);
seqlist_print(my_list);//0 1 2 3 4 5 6 7
seqlist_tail_add(my_list,6);
seqlist_tail_add(my_list,7);
seqlist_pos_val_chg(my_list,3,1);
seqlist_pos_val_chg(my_list,4,1);
seqlist_print(my_list);//0 1 2 1 1 5 6 7 6 7
seqlist_solo(my_list);
seqlist_print(my_list);//0 1 2 5 6 7
seqlist_clr(my_list);
seqlist_print(my_list);//空
seqlist_destroy(&my_list);
return 0;
}
编译:gcc seq_list.c main.c