데이터 구조 - 선형 표 의 순서 표시

10916 단어 데이터 구조
최근 에 실험 을 했 는데 선형 표를 써 서 쓰기 좋 은 것 같 지만 몇 가지 주의 할 점 을 발 견 했 습 니 다. 코드 는 다음 과 같 습 니 다.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 4
typedef int Elemtype;
typedef int Status;
typedef struct
{
Elemtype *elem;
int length;
int listsize;
}Sqlist; //
Status Init_list(Sqlist *L) //
{
L->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!L->elem)return(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}

Status Insert_list(Sqlist *L,int i,Elemtype e)//
{
Elemtype *p,*q,*newbase;
if(i<1||i>L->length+1)return ERROR;
if(L->length>=L->listsize)
{
newbase=(Elemtype *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(Elemtype));
if(!newbase)return OVERFLOW;
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=&(L->elem[i-1]);p--)
*(p+1)=*p;
*q=e;
++L->length;
return OK;

}

Status Del_list(Sqlist *L,int i,Elemtype *e)//
{
Elemtype *p;
if(i<1||i>L->length)return ERROR;
p=&(L->elem[i-1]);
*e=*p;
for(p++;p<=&(L->elem[L->length-1]);p++)
*(p-1)=*p;
--L->length;
// free(p-1); free
return OK;
}
void DisplayElem(Sqlist *L,int i)//
{
printf("%-4d
",L->elem[i-1]);
}
void Display_list(Sqlist *L)//
{
int i;
for(i=0;i<L->length;i++)
printf("%-4d",L->elem[i]);
}
void print()
{
printf("1)
2)
3)
4)
0)
");
}

int main()
{
Sqlist L;
Elemtype e;
int i,p=1;
char select;
if(Init_list(&L)==OK)
{
printf(" 10 :
");
for(i=0;i<10;i++)
scanf("%d",&L.elem[i]);
L.length=10;
while(p==1)
{
p=0;
print();
getchar();//
select=getchar();
switch(select)
{
case '1':printf(" :");scanf("%d%d",&i,&e);Insert_list(&L,i,e);p=1;break;
case '2':printf(" :");scanf("%d",&i);Del_list(&L,i,&e);printf(" %d
",e);p=1;break;
case '3':printf(" :");scanf("%d",&i);DisplayElem(&L,i);p=1;break;
case '4':Display_list(&L);p=1;break;
case '0':p=0;break;
default:
{
printf(" ! :0-4 :
");
getchar();
p=1;
}
}//switch
if(p==1)
{
printf("
……
");
getch();
system("cls");
}

}//while

}//if

return 0;
}

 
주의 할 점:
1) 데이터 구조 책 에서 기술 한 알고리즘 에 '&' 의 표시 가 있 으 면 이 값 을 인용 한 후에 이 값 을 되 돌려 야 한다.프로그램 을 쓸 때 함수 에서 '*' 를 사용 해 야 합 니 다. 주 함수 에서 실제 참 조 는 '&' 를 사용 해 야 합 니 다. 헷 갈 리 면 안 됩 니 다.
2) 구조 체 에서 Elemtype * elem 은 선형 표 의 기본 주 소 를 표시 하고 공간 을 분배 하면 L. elem [i] 와 같은 배열 형식 을 사용 할 수 있 습 니 다. 실제 L. elem [i] 는 L. * (elem + i) 입 니 다.
즉, Elemtype * elem 은 Elemtype elem [0] 입 니 다.
3) 예 를 들 어 요 소 를 삭제 한 후에 공간 을 방출 하지 마 세 요. 그렇지 않 으 면 오류 가 발생 하면 링크 는 가능 하고 해 야 합 니 다.
4) switch 의 내용 을 하나의 함수 에 따로 쓸 수 없습니다. 선형 표 변 수 를 정의 해 야 하기 때문에 원래 의 선형 표 가 아니면 오류 가 발생 할 수 있 습 니 다.해결 방법 은 전역 변 수 를 사용 할 수 있 지만 좋 지 않다.
5) 함수 가 편리 합 니 다. 자주 사용 하 세 요!

좋은 웹페이지 즐겨찾기