/* ============================================================================ Name : sequence_list.c Author : ntsk13 [email protected] Version : Copyright : GPL Description : sequence list study, complement by C Date : 2015.06.03 ============================================================================ */ #include <stdio.h> #include <stdlib.h> #define SEQ_LIST_CAPACITY 100 typedef struct sl_element{ int elem; int locate;//元素位置 }Sl_element,*Psl_element; typedef struct seq_list{ Sl_element array[SEQ_LIST_CAPACITY]; int cur_len;//当前长度 int capacity;//容量 }Slist; void Slist_init(Slist * L); int Slist_is_empty(Slist * L); int Slist_length(Slist * L); void Slist_clear(Slist *L); void Slist_get_element(Slist *L, int th,Psl_element pe); void Slist_get_element_locate(Slist *L,Sl_element e,int *locate); void Slist_get_last_element(Slist *L,Sl_element e,Psl_element pe); void Slist_get_next_element(Slist *L,Sl_element e,Psl_element pe); void Slist_insert_element(Slist *L,Sl_element e,int i); void Slist_delete_element(Slist *L,int i); void Slist_traverse(Slist *L); int main(void) { int i=0; int data[10]={0,1,2,3,4,5,6,7,8,9}; Slist one; Sl_element tmp,two,three,four; Slist_init(&one); for(i=0;i<10;i++) { tmp.elem=data[i]; tmp.locate=i; Slist_insert_element(&one,tmp,i); } printf("The two elementis %d ,locate is %d\n",two.elem,two.locate); fflush(stdout); Slist_get_last_element(&one,tmp,&two); Slist_get_last_element(&one,two,&three); Slist_get_next_element(&one,three,&four); printf("The two elementis %d ,locate is %d\n",two.elem,two.locate); printf("The three elementis %d ,locate is %d\n",three.elem,three.locate); printf("The four elementis %d ,locate is %d\n",four.elem,four.locate); printf("Before delete 5 ,length=%d \n",one.cur_len); Slist_traverse(&one); Slist_delete_element(&one,5); printf("After delete 5 length=%d \n",one.cur_len); Slist_traverse(&one); //printf("Before insert 5 ,20 \n"); Slist_insert_element(&one,two,5); printf("After insert 5 length=%d \n",one.cur_len); Slist_traverse(&one); Slist_delete_element(&one,0); Slist_delete_element(&one,1); Slist_delete_element(&one,2); Slist_delete_element(&one,3); Slist_delete_element(&one,9); printf("After delete 0,1,2,3,9 length=%d \n",one.cur_len); Slist_traverse(&one); return EXIT_SUCCESS; } void Slist_init(Slist * L) { (*L).capacity=SEQ_LIST_CAPACITY; (*L).cur_len=0; } int Slist_is_empty(Slist * L) { if( (*L).cur_len==0 ) return 1; else return 0; } int Slist_length(Slist * L) { return (*L).cur_len; } void Slist_clear(Slist *L) { (*L).cur_len=0; } void Slist_get_element(Slist *L, int th,Psl_element pe) { *pe=(*L).array[th]; } void Slist_get_element_locate(Slist *L,Sl_element e,int *locate) { *locate=e.locate; } void Slist_get_last_element(Slist *L,Sl_element e,Psl_element pe) { *pe=(*L).array[e.locate-1] ; } void Slist_get_next_element(Slist *L,Sl_element e,Psl_element pe) { *pe=(*L).array[e.locate+1] ; } void Slist_insert_element(Slist *L,Sl_element e,int i) { int length=(*L).cur_len; int j=0; if(i==length) { (*L).array[i]=e; (*L).cur_len+=1; (*L).array[i].locate=i; return; } if(i>length) { puts("insert error,i > length!!!"); return; } if( length== (*L).capacity) { puts("sequence list full cannot insert!!!"); return; } for(j=length-1; j>=i;j--) { (*L).array[j+1]=(*L).array[j]; (*L).array[j+1].locate+=1; } (*L).array[i]=e; (*L).cur_len+=1; (*L).array[i].locate=i; } void Slist_delete_element(Slist *L,int i) { int length=(*L).cur_len; int j=0; if(i==length) { (*L).cur_len-=1; return; } if(i>length || i < 0 ) { puts("delete site error !!!"); return; } for(j=i; j<length;j++) { (*L).array[j]=(*L).array[j+1]; (*L).array[j].locate-=1; } (*L).cur_len-=1; } void Slist_traverse(Slist *L) { int i=0; for(i=0;i<(*L).cur_len;i++) { printf("The %dth element is %d\n",i,(*L).array[i].elem); fflush(stdout); } }