简单数据结构之顺序表(C实现)

来源:互联网 发布:随机森林算法入门 编辑:程序博客网 时间:2024/04/27 07:20
/* ============================================================================ Name        : sequence_list.c Author      : ntsk13 beijiwei@qq.com Version     : Copyright   : GPL Description : sequence list study, complement by C Date : 2015.06.03 ============================================================================ */#include <stdio.h>#include <stdlib.h>#define SEQ_LIST_CAPACITY 100typedef 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;elsereturn 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);}}

0 0
原创粉丝点击