#ifndef _SEQLIST_H
#define _SEQLIST_H
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define N 100
typedef int datatype;
typedef struct{
datatype data[N];
int last;
}seqlist;
seqlist *seqlistCreate();
void seqlistInster(seqlist *s,datatype value);
void seqlistPrint(seqlist *s);
datatype seqlistDel(seqlist *s);
bool seqlistEmpty(seqlist *s);
bool seqlistFull(seqlist *s);
void seqlistModityDataByData(seqlist *s,datatype oldValue,datatype newValue);
void seqlistModityDataByPos(seqlist *s,int Pos,datatype value);
datatype seqliseSearchDataByPos(seqlist *s,int Pos);
seqlist* seqlistSearchPosByData(seqlist *s,datatype value);
void seqlistInsterDataByPos(seqlist *s,int Pos,datatype value);
datatype seqlistDelDataByPos(seqlist *s,int Pos);
#endif
seqlist *seqlistCreate(){
seqlist *s=(seqlist *)malloc(sizeof(seqlist));
s->last=-1;
return s;
}
void seqlistInster(seqlist *s,datatype value){
if(seqlistFull(s)){
printf("the seqlist is full\n");
return ;
}
s->last++;
s->data[s->last] = value;
return ;
}
void seqlistPrint(seqlist *s){
int i;
for(i=0;i<=s->last;i++){
printf("%d ",s->data[i]);
}
putchar(10);
return ;
}
datatype seqlistDel(seqlist *s){
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return (datatype)-1;
}
datatype del=s->data[s->last];
s->last--;
return del;
}
void seqlistModityDataByData(seqlist *s,datatype oldValue,datatype newValue){
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return ;
}
bool iFind=false;
int i;
for(i=0;i<=s->last;i++){
if(s->data[i]==oldValue){
s->data[i]=newValue;
iFind=true;
}
}
if(iFind==false){
printf("the value you choosed(%d) is not exist\n", oldValue);
}
return ;
}
bool seqlistEmpty(seqlist *s){
return s->last<0?true:false;
}
bool seqlistFull(seqlist *s){
return s->last==N-1?true:false;
}
void seqlistModityDataByPos(seqlist *s,int Pos,datatype value){
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return ;
}
if(Pos>s->last){
printf("the pos you choosed(%d) is not exist\n", Pos);
return ;
}
s->data[Pos]=value;
return ;
}
datatype seqliseSearchDataByPos(seqlist *s,int Pos){
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return (datatype)-1;
}
if(Pos>s->last||Pos<0){
printf("the pos you choosed(%d) is not exist\n", Pos);
return (datatype)-1;
}
return s->data[Pos];
}
seqlist* seqlistSearchPosByData(seqlist *s,datatype value){
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return (seqlist*)-1;
}
seqlist *allPos=(seqlist*)malloc(sizeof(N*sizeof(int)));
allPos=seqlistCreate();
int n=0;
bool iFind=false;
for(int i=0;i<=s->last;i++){
if(s->data[i]==value){
seqlistInster(allPos,i);
iFind=true;
}
}
if(iFind==false){
printf("the date you choosed(%d) is not exist\n",value);
return (seqlist*)-1;
}
return allPos;
}
void seqlistInsterDataByPos(seqlist *s,int Pos,datatype value){
int i;
if(seqlistFull(s)){
printf("the seqlist is full\n");
return ;
}
if(Pos>s->last+1||Pos<0){
printf("the pos you choosed(%d) is invaild\n",Pos);
return ;
}
s->last++;
for(i=s->last;i>Pos;i--){
s->data[i]=s->data[i-1];
}
s->data[Pos]=value;
return ;
}
datatype seqlistDelDataByPos(seqlist *s,int Pos){
int i;
if(seqlistEmpty(s)){
printf("the seqlist is empty\n");
return (datatype)-1;
}
if(Pos>s->last||Pos<0){
printf("the pos you choosed(%d) is invaild\n",Pos);
return (datatype)-1;
}
datatype del=s->data[Pos];
for(i=Pos;i<=s->last;i++){
s->data[i]=s->data[i+1];
}
s->last--;
return del;
}