데이터 구조 - c 언어 - 비 체감 질서 있 는 순서 표 에 요소 x 를 삽입 하여 순서 표 의 질서 성 을 유지 합 니 다.
2781 단어 데이터 매듭
알고리즘 을 프로그램 코드 로 변환 하 는 과정 을 익히 고 순서 표 의 논리 적 구조 특성 을 파악 하 며 순서 표 저장 구조의 C 언어 설명 방법 을 익 힌 다.순서 표 의 기본 동작: 찾기, 삽입, 삭제, 통합 등 순서 표 의 무 작위 액세스 특성 을 파악 합 니 다.
실험 내용
(1) 비 체감 질서 있 는 순서 표 에 요소 x 를 삽입 하여 순서 표 의 질서 성 을 유지한다.
#include
#include
#define LIST_INIT_SIZE 10//
#define LISTINCREMENT 5//
#define OVERFLOW 0
#define OK 1
typedef struct{
int *elem;//
int length;//
int listsize;//
}Sqlist;
//
int InitList(Sqlist *l){
l->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->elem){
printf(" !
");
exit(OVERFLOW);
}
l->length = 0;
l->listsize = LIST_INIT_SIZE;
return OK;
}
//
int ListInsert(Sqlist *l,int i,int e){
if(!l->length){
l->length++;
l->elem[l->length-1] = e;
return OK;
}else if(i<1||i>l->length+1){
printf(" , !
");
exit(OVERFLOW);//
}
if(l->length==l->listsize){//
int *newbase;
newbase = (int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase){
printf(" !
");
exit(OVERFLOW);
}
l->elem = newbase;
l->listsize += LISTINCREMENT;
}
int *p;
p = l->elem+l->length-1;
while(p>=l->elem+i-1) *(p+1) = *p--;
l->elem[i-1] = e;
l->length++;
return OK;
}
//
int Insert(Sqlist *l,int e){
int i=0,*p=l->elem+l->length-1;//i
while(e>=l->elem[i]) i++;
if(l->length==l->listsize){
int *newbase;
newbase = (int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase){
printf(" !
");
exit(OVERFLOW);
}
l->elem = newbase;
l->listsize += LISTINCREMENT;
}
while(p>=l->elem+i) *(p+1)=*p--;
l->elem[i] = e;
l->length++;
return OK;
}
//
void PrintList(Sqlist *l){
for(int i=0;ilength;i++){
printf("%d ",l->elem[i]);
}
}
main(){
int flag=1,i=1,num;//i i 1 0
Sqlist l;
InitList(&l);
printf(" :
");
while(flag){//
int num;
scanf("%d",&num);
ListInsert(&l,i,num);
i++;// i-1 length
printf("
?0 no , 1 yes\t");
scanf("%d",&flag);
}
PrintList(&l);
printf(" :
");
scanf("%d",&num);
Insert(&l,num);//
/*//
i=1; //i
while(num>=l.elem[i-1]&&i<=l.length) i++;
ListInsert(&l,i,num);*/
printf(" :
");
PrintList(&l);
}