기본 간단 한 데이터 구조 - C 언어 - 동적 링크
4124 단어 데이터 구조
간단 한 동적 링크 구축.그 전에 malloc 와 calloc 함수 의 차 이 를 말 하 세 요.
malloc 함수 원형 은:
void * malloc(unsigned int size);
그 기능 은 메모리 동적 저장 소 에서 길이 가 size 인 연속 공간 을 분배 하 는 것 입 니 다. 분배 역 의 시작 위 치 를 되 돌려 줍 니 다. 이 함 수 를 어떻게 호출 하 는 지 성공 하지 못 했 습 니 다. 예 를 들 어 공간 이 부족 한 등 원인 으로 돌아 온 것 은 빈 지침 입 니 다.
calloc 함수 원형 은:
void * calloc(unsigned n,unsigned size);
그 기능 은 메모리 동적 저장 소 에서 n 개의 길이 가 size 인 연속 공간 을 분배 하 는 것 입 니 다. 분배 역 의 시작 위 치 를 되 돌려 줍 니 다. 이 함 수 를 어떻게 호출 하 는 지 성공 하지 못 했 습 니 다. 예 를 들 어 공간 이 부족 한 등 원인 으로 돌아 온 것 은 빈 지침 입 니 다.
----------------------------------------------------------------------------------------------------------------------------------
연속 하면 여기 서 추가 설명 이 필요 합 니 다. 여기 서 연속 은 모든 노드 의 공간 을 말 합 니 다. 링크 의 모든 요소 가 연속 적 인 것 이 아니 라 배열 구조 가 연속 적 인 메모리 주소 입 니 다.따라서 일반적으로 같은 크기 의 배열 과 링크 를 옮 겨 다 니 는 것 은 실제 배열 이 빠 른 것 입 니 다. CPU 의 공간 부분 적 인 접근 을 고려 해 야 하기 때 문 입 니 다!
다음은 이 동적 링크 의 기본 조작 코드 (비교적 간단 한 기초) 입 니 다.
#include
#include
/* */
// ( List ) ,
typedef struct List * link;//
typedef struct List Lnode;//
struct List {
int data;//
struct List *next;
};
/* ( )*/
link create(link Head)
{
int Newdata;
link NewPoint;//
Head=(link)malloc(sizeof(Lnode));//
printf("the new num is:
");
scanf("%d",&Newdata);
Head->data=Newdata;
Head->next=NULL;
while(1){//
NewPoint=(link)malloc(sizeof(Lnode));
if(NewPoint==NULL)
break;
printf("the new num is:
");
scanf("%d",&Newdata);
if(Newdata==-1)
return Head;
NewPoint->data=Newdata;
NewPoint->next=Head;
Head=NewPoint;
}
return Head;
}
/* */
void display(link Head)
{
link p;p=Head;
if(p==NULL)
printf("it is empty
");
else
do
{
printf("%4d",p->data);
p=p->next;
} while(p!=NULL);
}
/* */
int lenth(link Head)
{
int len=0;link p; p=Head;
while(p!=NULL)
{
len++;
p=p->next;
}
return len;
}
/* */
link insert(link Head,int x,int i)//x i
{
link NewPoint,p=Head;
int j=1;
NewPoint=(link)malloc(sizeof(Lnode));
NewPoint->data=x;//
if(i==1)//
{NewPoint->next=Head;Head=NewPoint;}
else
{
while(jnext!=NULL){//
p=p->next;j++;
}if(j==i-1){
NewPoint->next=p->next;
p->next=NewPoint;
}else
printf("cannt insert!!!");
}
return Head;
}
/* */
link del(link Head,int i)
{
int j=1;
link p,t;p=Head;
if(i==1)
{
p=p->next;free(Head);//
Head=p;
}else
{
while(jnext!=NULL)//
{
p=p->next;j++;
}
if(p->next!=NULL && j==i-1)//
{
t=p->next;p->next=t->next;
}
if(t!=NULL) free(t);
}
return Head;
}
/* */
int get(link Head,int i)
{
int j=1;
link p;p=Head;
while(jnext;j++;}
if(p!=NULL)
return p->data;
else
printf("some error happed can find the data
!");
return -1;
}
/* */
link freeall(link Head)
{
link p;p=Head;
while(p!=NULL)//
{
p=p->next;
free(Head)
Head=p;
}
return Head;
}
/* */
/* */
link connect(link Head,link Head1)
{
link p;p=Head;
while(p->next!=NULL)//
p=p->next;
p->next=Head1;
return Head;
}
/* */
int compare(link Head;link Head1)
{
link p1,p2;p1=Head;p2=Head1;
while(1)
{
if((p1->next==NULL) && (p2->next==NULL))
return 1;
if(p1->data!=p2->data)
return 0;
else
{
p1=p1->next;p2=p2->next;
}
}
}
int main(){//
link head;
head=create(head);
head=insert(head,20,3);
int a=lenth(head);
head=del(head,3);
printf("lenth is :%d
",a);
display(head);
printf("
");
int b=get(head,2);
printf("the num is:%d",b);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.