선형 표 의 단일 체인 표 저장 구조
//2.112.h
/* c1.h ( ) */
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc() */
#include<limits.h> /* INT_MAX */
#include<stdio.h> /* EOF(=^Z F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 math.h OVERFLOW 3, */
typedef int Status; /* Status , , OK */
typedef int Boolean; /* Boolean , TRUE FALSE */
헤더 파일 2.113. h
//2.113.h
/* c2-2.h */
struct LNode
{
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList; /* LinkList */
헤더 파일 2.114. h
//2.114.h
/* bo2-2.c ( c2-2.h ) (12 ) */
#include"2.112.h"
typedef int ElemType;
#include"2.113.h"
Status InitList(LinkList *L)
{ /* : L */
*L = (LinkList)malloc(sizeof(struct LNode)); /* , L */
if (!*L) /* */
exit(OVERFLOW);
(*L)->next = NULL; /* */
return OK;
}
Status DestroyList(LinkList *L)
{ /* : L 。 : L */
LinkList q;
while (*L)
{
q = (*L)->next;
free(*L);
*L = q;
}
return OK;
}
Status ClearList(LinkList L) /* L */
{ /* : L 。 : L */
LinkList p, q;
p = L->next; /* p */
while (p) /* */
{
q = p->next;
free(p);
p = q;
}
L->next = NULL; /* */
return OK;
}
Status ListEmpty(LinkList L)
{ /* : L 。 : L , TRUE, FALSE */
if (L->next) /* */
return FALSE;
else
return TRUE;
}
int ListLength(LinkList L)
{ /* : L 。 : L */
int i = 0;
LinkList p = L->next; /* p */
while (p) /* */
{
i++;
p = p->next;
}
return i;
}
Status GetElem(LinkList L, int i, ElemType *e) /* 2.8 */
{ /* L 。 i , e OK, ERROR */
int j = 1; /* j */
LinkList p = L->next; /* p */
while (p&&j<i) /* , p i p */
{
p = p->next;
j++;
}
if (!p || j>i) /* i */
return ERROR;
*e = p->data; /* i */
return OK;
}
int LocateElem(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType))
{ /* : L ,compare() ( 1, 0) */
/* : L 1 e compare() 。 */
/* , 0 */
int i = 0;
LinkList p = L->next;
while (p)
{
i++;
if (compare(p->data, e)) /* */
return i;
p = p->next;
}
return 0;
}
Status PriorElem(LinkList L, ElemType cur_e, ElemType *pre_e)
{ /* : L */
/* : cur_e L , , pre_e , */
/* OK; ,pre_e , INFEASIBLE */
LinkList q, p = L->next; /* p */
while (p->next) /* p */
{
q = p->next; /* q p */
if (q->data == cur_e)
{
*pre_e = p->data;
return OK;
}
p = q; /* p */
}
return INFEASIBLE;
}
Status NextElem(LinkList L, ElemType cur_e, ElemType *next_e)
{ /* : L */
/* : cur_e L , , next_e , */
/* OK; ,next_e , INFEASIBLE */
LinkList p = L->next; /* p */
while (p->next) /* p */
{
if (p->data == cur_e)
{
*next_e = p->next->data;
return OK;
}
p = p->next;
}
return INFEASIBLE;
}
Status ListInsert(LinkList L, int i, ElemType e) /* 2.9。 L */
{ /* L i e */
int j = 0;
LinkList p = L, s;
while (p&&j<i - 1) /* i-1 */
{
p = p->next;
j++;
}
if (!p || j>i - 1) /* i 1 */
return ERROR;
s = (LinkList)malloc(sizeof(struct LNode)); /* */
s->data = e; /* L */
s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete(LinkList L, int i, ElemType *e) /* 2.10。 L */
{ /* L , i , e */
int j = 0;
LinkList p = L, q;
while (p->next&&j<i - 1) /* i , p */
{
p = p->next;
j++;
}
if (!p->next || j>i - 1) /* */
return ERROR;
q = p->next; /* */
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
Status ListTraverse(LinkList L, void(*vi)(ElemType))
/* vi ElemType, bo2-1.c ElemType& */
{ /* : L */
/* : L vi()。 vi() , */
LinkList p = L->next;
while (p)
{
vi(p->data);
p = p->next;
}
printf("
");
return OK;
}
테스트 함수
//2.111
/* algo2-5.c 2.11、2.12 */
#include"2.114.h"
void CreateList(LinkList *L, int n) /* 2.11 */
{ /* ( ) n , L */
int i;
LinkList p;
*L = (LinkList)malloc(sizeof(struct LNode));
(*L)->next = NULL; /* */
printf(" %d
", n);
for (i = n; i>0; --i)
{
p = (LinkList)malloc(sizeof(struct LNode)); /* */
scanf_s("%d", &p->data); /* */
p->next = (*L)->next; /* */
(*L)->next = p;
}
}
void CreateList2(LinkList *L, int n)
{ /* ( ) n , */
int i;
LinkList p, q;
*L = (LinkList)malloc(sizeof(struct LNode)); /* */
(*L)->next = NULL;
q = *L;
printf(" %d
", n);
for (i = 1; i <= n; i++)
{
p = (LinkList)malloc(sizeof(struct LNode));
scanf_s("%d", &p->data);
q->next = p;
q = q->next;
}
// p->next = NULL;
}
void MergeList(LinkList La, LinkList *Lb, LinkList *Lc)/* 2.12 */
{ /* La Lb 。 */
/* La Lb Lc,Lc */
LinkList pa = La->next, pb = (*Lb)->next, pc;
*Lc = pc = La; /* La Lc */
while (pa && pb)
if (pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
pc->next = pa ? pa : pb; /* */
free(*Lb); /* Lb */
Lb = NULL;
}
void visit(ElemType c) /* ListTraverse() ( ) */
{
printf("%d ", c);
}
void main()
{
int n = 5;
LinkList La, Lb, Lc;
printf(" , ");
CreateList2(&La, n); /* n */
printf("La="); /* La */
ListTraverse(La, visit);
printf(" , ");
CreateList(&Lb, n); /* n */
printf("Lb="); /* Lb */
ListTraverse(Lb, visit);
MergeList(La, &Lb, &Lc); /* La Lb, Lc */
printf("Lc="); /* Lc */
ListTraverse(Lc, visit);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.