C 언어 는 단일 체인 표 의 기본 조작 을 실현 한다.

32155 단어 데이터 구조
이 블 로 그 는 코드 만 실현 되 고 논리 적 해석 이 없다.
링크 노드
typedef struct node{
	int data;
	struct node *next;
}LNode, *LinkedList;

1. 데이터 의 이중 삽입 방식
1 > 헤드 삽입 법
LinkedList headInsert(LinkedList *L){
	LinkedList p,s;
	(*L) = s = (LinkedList)malloc(sizeof(LNode));
	s->next = NULL;
	int num;
	scanf("%d", &num);
	while(num != -1){
		p = (LinkedList)malloc(sizeof(LNode));
		p->data = num;
		p->next = s->next;
		s->next = p;
		scanf("%d", &num);
	}
	return s;
}

2 > 꼬리 삽입 법
LinkedList tailInsert(LinkedList *L){
	LinkedList p,s;
	int num;
	(*L) = s = (LinkedList)malloc(sizeof(LNode)); 
	s->next = NULL;
	scanf("%d", &num);
	while(num != -1){
		p = (LinkedList)malloc(sizeof(LNode));
		p->data = num;
		p->next = NULL;
		s->next = p;
		s = p;
		scanf("%d", &num);
	}
	return (*L);
} 

2. 증가 (제 k 에 게 결산 점 을 준 후 x 의 결산 점 을 추가)
void  add(LinkedList L, int k, int x){
	int num;
	LinkedList p,s;
	p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	} 
	s = (LinkedList)malloc(sizeof(LNode));
	s->data = x;
	s->next = p->next;
	p->next = s;
}

3. 삭제 (k 번 째 노드 삭제)
void deleteK(LinkedList L, int k){
	LinkedList p,q;
	p = L->next;
	for(int i=1; i<k-1; i++){
		p = p->next;
	}
	q = p->next;
	p->next = q->next;
	free(q);
} 

4. 변경 (k 번 째 노드 의 값 을 x 로 변경)
void update(LinkedList L, int k, int x){
	LinkedList p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	}
	p->data = x;
} 

5. 찾 아 보기 (k 번 째 노드 의 값 조회)
int getK(LinkedList L, int k){
	LinkedList p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	} 
	return p->data;
}

전체 코드:
#include
#include
#include
 
typedef struct node{
	int data;
	struct node *next;
}LNode,*LinkedList;

//    
LinkedList headInsert(LinkedList *L){
	LinkedList p,s;
	(*L) = s = (LinkedList)malloc(sizeof(LNode));
	s->next = NULL;
	int num;
	scanf("%d", &num);
	while(num != -1){
		p = (LinkedList)malloc(sizeof(LNode));
		p->data = num;
		p->next = s->next;
		s->next = p;
		scanf("%d", &num);
	}
	return s;
}

//   
LinkedList tailInsert(LinkedList *L){
	LinkedList p,s;
	int num;
	(*L) = s = (LinkedList)malloc(sizeof(LNode)); 
	s->next = NULL;
	scanf("%d", &num);
	while(num != -1){
		p = (LinkedList)malloc(sizeof(LNode));
		p->data = num;
		p->next = NULL;
		s->next = p;
		s = p;
		scanf("%d", &num);
	}
	return (*L);
} 

//  k          x
void  add(LinkedList L, int k, int x){
	int num;
	LinkedList p,s;
	p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	} 
	s = (LinkedList)malloc(sizeof(LNode));
	s->data = x;
	s->next = p->next;
	p->next = s;
}

//   k   
void deleteK(LinkedList L, int k){
	LinkedList p,q;
	p = L->next;
	for(int i=1; i<k-1; i++){
		p = p->next;
	}
	q = p->next;
	p->next = q->next;
	free(q);
} 

//   k      x
void update(LinkedList L, int k, int x){
	LinkedList p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	}
	p->data = x;
} 

//   k      
int getK(LinkedList L, int k){
	LinkedList p = L->next;
	for(int i=1; i<k; i++){
		p = p->next;
	} 
	return p->data;
}

//        
void print(LinkedList L){
	LinkedList p = L->next;
	while(p){
		printf("%d\t", p->data);
		p = p->next;
	}
	printf("
"
); } // int main(){ LinkedList head = NULL; // head = headInsert(&head); // head = tailInsert(&head); print(head); // add(head, 3, 4); print(head); // deleteK(head, 4); print(head); // update(head, 4, 4); print(head); // int num = getK(head, 3); printf("%d",num); }

좋은 웹페이지 즐겨찾기