순서 표 의 실현 (2)

9280 단어 데이터 구조
정적 배열 기반 순서 표 의 다음 기본 동작 을 실현 합 니 다.
1. 임의의 아래 표 시 된 요소 의 값 찾기
2. 임의의 위치 에 있 는 원소 에 값 설정
3. 대응 하 는 값 의 아래 표 시 를 찾 습 니 다.
4. 순서 표 에서 지정 한 값 을 삭제 합 니 다. 중복 요소 가 있 으 면 첫 번 째 만 삭제 합 니 다.
5. 순서 표 에서 지정 한 값 을 모두 삭제 하고 시간 복잡 도가 O (N) 인 최적화 버 전 을 실현 해 야 합 니 다.
6. 순서 표 요소 개수 가 져 오기
7. 순서 표 가 비어 있 는 지 판정
8. 일반적인 거품 정렬
9. 리 턴 함 수 를 이용 하여 거품 정렬
seqlist.h
#include
#include
#include

#define SeqlistMaxSize 20
#define Header_Print printf("
==========%s==========
",__FUNCTION__); typedef char SeqlistType; typedef struct Seqlist{ SeqlistType SeqlistArr[SeqlistMaxSize]; size_t size; }Seqlist; void SeqlistInit(Seqlist* seqlist); void SeqlistRemoveAll2(Seqlist* seqlist,SeqlistType value); void SeqlistGet(Seqlist* seqlist,size_t pos); void SeqlistSet(Seqlist* seqlist,size_t pos,SeqlistType value); void SeqlistFind(Seqlist* seqlist,SeqlistType value); void SeqlistRemove(Seqlist* seqlist,SeqlistType to_delete); void SeqlistRemoveAll(Seqlist* seqlist,SeqlistType to_delete); size_t SeqlistSize(Seqlist* seqlist); int SeqlistEmpty(Seqlist* seqlist); void SeqlistBubbleSort(Seqlist* seqlist); void SeqlistBubbleSortEx(Seqlist* seqlist,Cmp cmp); void SeqlistPrint(Seqlist* seqlist,SeqlistType* ch); void SeqlistPushBack(Seqlist* seqlist,SeqlistType value); void SeqlistErase(Seqlist* seqlist,size_t pos); typedef int (*Cmp)(SeqlistType a,SeqlistType b);
seqlist.c
#include"seqlist.h"
#include

void SeqlistGet(Seqlist* seqlist,size_t pos){
	if(seqlist == NULL){
		return;
	}
	if(pos >= seqlist->size){
		return;
	}
	size_t value = seqlist->SeqlistArr[pos];
	printf("%c",value);
}


void SeqlistSet(Seqlist* seqlist,size_t pos,SeqlistType value){
	if(seqlist == NULL){
		return;
	}
	if(pos >= seqlist->size){
		return;
	}
	size_t i = seqlist->size - 1;
	for(;i >= pos;--i){
		seqlist->SeqlistArr[i+1]=seqlist->SeqlistArr[i];
	}
	seqlist->SeqlistArr[pos]=value;
	seqlist->size++;
}


size_t SeqlistFind(Seqlist* seqlist,SeqlistType value){
	if(seqlist == NULL){
		return;
	}
	size_t i = 0;
	for(;i < seqlist->size;++i){
		if(seqlist->SeqlistArr[i] == value){
			printf("pos = %d ",i);
			return i;
		}
	}	
	return -1;
}


void SeqlistRemove(Seqlist* seqlist,SeqlistType to_delete){
	if(seqlist == NULL){
		return;
	}
	if(seqlist->size == 0){
		return;
	}
	size_t i = 0;
	size_t pos = 0;
	for(;i < seqlist->size;++i){
		if(seqlist->SeqlistArr[i] == to_delete)
			pos = i;
	}
	SeqlistErase(seqlist,pos);
}


void SeqlistRemoveAll(Seqlist* seqlist,SeqlistType to_delete){
	if(seqlist == NULL){
		return;
	}
	if(seqlist->size == 0){
		return;
	}
	size_t i = 0;
	size_t pos=0;
	for(;isize;i++){
		if(seqlist->SeqlistArr[i] == to_delete){
			pos = i;
		for(pos=i;possize;pos++){
			seqlist->SeqlistArr[pos]=seqlist->SeqlistArr[pos+1];
		}
		seqlist->size--;
		}
	}
}


size_t SeqlistSize(Seqlist* seqlist){
	if(seqlist == NULL){
		return;
	}
	size_t i=0;
	size_t size=0;
	for(;isize;i++)
		size++;
	printf("the number of seqlist is %ld
",size); return size; } int SeqlistEmpty(Seqlist* seqlist){ if(seqlist == NULL){ return; } if(seqlist->size == 0){ printf("the seqlist is empty
"); return 1; } else{ printf("the seqlist is not empty
"); return -1; } } void SeqlistBubbleSort(Seqlist* seqlist){ if(seqlist == NULL){ return; } int i=0; for(;isize-1;i++){ int j=0; for(;jsize-1-i;j++){ if(seqlist->SeqlistArr[j]>seqlist->SeqlistArr[j+1]){ int tmp = seqlist->SeqlistArr[j]; seqlist->SeqlistArr[j]=seqlist->SeqlistArr[j+1]; seqlist->SeqlistArr[j+1]=tmp; } } } } int Greater(SeqlistType a,SeqlistType b){ return a > b?1 : 0; } int Less(SeqlistType a,SeqlistType b){ return a < b?1 : 0; } Swap(SeqlistType *a,SeqlistType *b){ SeqlistType tmp=*a; *a=*b; *b=tmp; } void SeqlistBubbleSortEx(Seqlist* seqlist,Cmp cmp){ if(seqlist == NULL){ return; } size_t i=0; size_t j=0; for(i=0;isize-1;i++){ for(j=0;jsize-1-i;j++){ if(cmp(seqlist->SeqlistArr[j],seqlist->SeqlistArr[j+1])){ Swap(&seqlist->SeqlistArr[j],&seqlist->SeqlistArr[j+1]); } } } } void SeqlistRemoveAll2(Seqlist* seqlist,SeqlistType value){ if(seqlist == NULL){ return; } if(seqlist->size == 0){ return; } int i=0; int count=0; for(;isize;i++){ if(seqlist->SeqlistArr[i]==value){ count++; } else{ seqlist->SeqlistArr[i-count]=seqlist->SeqlistArr[i]; } } seqlist->size-=count; }
test.c
#include"sxb.h"
#include

void SeqlistInit(Seqlist* seqlist);
void SeqlistPushBack(Seqlist* seqlist,SeqlistType value);


void TestSeqlistGet(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistGet(&seqlist,1);
}


void TestSeqlistSet(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistSet(&seqlist,1,'b');
	SeqlistPrint(&seqlist,"insert a value to the specific position");
}


void TestSeqlistFind(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistFind(&seqlist,'b');
}


void TestSeqlistRemove(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistRemove(&seqlist,'b');
	SeqlistPrint(&seqlist,"delete a value to the specific value");
}


void TestSeqlistRemoveAll(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistPushBack(&seqlist,'b');
	SeqlistRemoveAll(&seqlist,'b');
	SeqlistPrint(&seqlist,"delete all the values of the specific value");
}


void TestSeqlistSize(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'d');
	SeqlistSize(&seqlist);
}


void TestSeqlistEmpty(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'b');
	SeqlistEmpty(&seqlist);
}


void TestSeqlistBubbleSort(){
	Header_Print;
	Seqlist seqlist;
	SeqlistInit(&seqlist);

	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'c');
	SeqlistPushBack(&seqlist,'b');
	SeqlistPushBack(&seqlist,'d');
	SeqlistPushBack(&seqlist,'a');
	SeqlistPushBack(&seqlist,'x');
	SeqlistPushBack(&seqlist,'s');
	SeqlistPushBack(&seqlist,'f');
	SeqlistBubbleSort(&seqlist);
	SeqlistPrint(&seqlist,"bubble sort
"); } void TestSeqlistBubbleSortEx(){ int Greater(SeqlistType a,SeqlistType b); int Less(SeqlistType a,SeqlistType b); Header_Print; Seqlist seqlist; SeqlistInit(&seqlist); SeqlistPushBack(&seqlist,'a'); SeqlistPushBack(&seqlist,'c'); SeqlistPushBack(&seqlist,'b'); SeqlistPushBack(&seqlist,'d'); SeqlistPushBack(&seqlist,'a'); SeqlistPushBack(&seqlist,'x'); SeqlistPushBack(&seqlist,'s'); SeqlistPushBack(&seqlist,'f'); SeqlistBubbleSortEx(&seqlist,Less); SeqlistPrint(&seqlist,"use the callback function for the bubble sort"); } void TestSeqlistRemoveAll2(){ Header_Print; Seqlist seqlist; SeqlistInit(&seqlist); SeqlistPushBack(&seqlist,'a'); SeqlistPushBack(&seqlist,'b'); SeqlistPushBack(&seqlist,'c'); SeqlistPushBack(&seqlist,'d'); SeqlistPushBack(&seqlist,'b'); SeqlistRemoveAll2(&seqlist,'b'); SeqlistPrint(&seqlist,"delete all the values of the specific value"); } int main(){ TestSeqlistGet(); TestSeqlistSet(); TestSeqlistFind(); TestSeqlistRemove(); TestSeqlistRemoveAll(); TestSeqlistSize(); TestSeqlistEmpty(); TestSeqlistBubbleSort(); TestSeqlistBubbleSortEx(); TestSeqlistRemoveAll2(); }

좋은 웹페이지 즐겨찾기