데이터 구조 - 체인 선형 표

11079 단어 데이터 구조
코드 는 다음 과 같 습 니 다:
#include<stdio.h> //        
#include<stdlib.h>
#include<conio.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef int Elemtype;
typedef int Status ;

typedef struct LNode
{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
//
LNode * Creat(int n);
Status Insert(Linklist L,int i,Elemtype e);
Status Del(Linklist L,int i,Elemtype *e);
Status Find(Linklist L,int i,Elemtype *e);
void display(Linklist L);

LNode * Creat(int n)
{
LNode *p,*q,*L;
int i;
p=(Linklist)malloc(sizeof(LNode));
if(!p)
{
return ERROR;
exit(OVERFLOW);
}
p->data=0;//
for(i=1;i<=n;i++)
{
if(i==1)L=p;
else
q->next=p;
q=p;
p=(Linklist)malloc(sizeof(LNode));
scanf("%d",&p->data);
}
q->next=p;
q=p;
q->next=NULL;
return L;


}
Status Insert(Linklist L,int i,Elemtype e)
{
int j=0;
LNode *p,*q;
p=L;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1)
{
printf(" !

");
return ERROR;
}
q=(Linklist)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;

return OK;


}
Status Del(Linklist L,int i,Elemtype *e)
{
LNode *p,*q;
int j=0;
p=L;
while(p->next&&j<i-1)// i , p
{
p=p->next;
j++;
}
if(!p->next||j>i-1)
{
printf(" !
");
return ERROR;
}
else
{
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return OK;
}
}
Status Find(Linklist L,int i,Elemtype *e)
{
LNode *p;
int j=0;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
{
printf(" !
");
return ERROR;
}
else
*e=p->data;
return OK;
}
void display(Linklist L)
{
LNode *p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
putchar('
');
}
int main()
{
LNode *p;
int n,i,t=1;
Elemtype e;
char c;
printf(" :
");
scanf("%d",&n);
printf(" :");
p=Creat(n);

while(t)
{
printf("1)
2)
3)
4)
0)
");
getchar();
c=getchar();
switch(c)
{
case '1':printf(" :
");
scanf("%d",&i);printf(" :
");
scanf("%d",&e);
Insert(p,i,e);
t=1;
break;
case '2':printf(" :
");
scanf("%d",&i);
if(Del(p,i,&e)==OK)
printf(" :%d
",e);
t=1;
break;
case '3':printf(" :
");
scanf("%d",&i);
if(Find(p,i,&e)==OK)
printf(" :%d
",e);
t=1;
break;
case '4':display(p);t=1;break;
case '0':t=0;break;
}
if(t)
{
printf(" ……
");
getch();
system("cls");
}
}

return 0;
}

요약:
1) 체인 시 계 는 상단 의 결점 을 가지 고 조작 하기 쉽다.
2) 되 돌아 오 는 상태 로 출력 제어
3) 주 소 를 전달 하 는 작업 은 함수 가 바 뀌 면 원래 의 것 도 변 합 니 다. 그러나 제 가 한번 해 보 았 습 니 다. 함 수 를 만 들 려 면 헤드 포인터 만 되 돌려 야 display () 함수 로 출력 할 수 있 습 니 다.
4) Del () 함수 에 서 는 p -> next 대신 중간 변수 q 를 사용 해 야 합 니 다. 직접 p 를 사용 할 수 없습니다. free (p -> next) 는 오류 가 발생 할 수 있 습 니 다. 시도 해 보 았 습 니 다.
5) Del () 과 Find () 함수 에서 어떻게 들 어 오고 출력 하 는 지 주의 하 세 요.

좋은 웹페이지 즐겨찾기