기본 간단 한 데이터 구조 - 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); }

좋은 웹페이지 즐겨찾기