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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.