학 빈 학 데이터 구조 (04) - 링크 [링크 의 조작]
3872 단어 데이터 구조 와 알고리즘
# include
# include
# include
typedef struct Node
{
int data; //
struct Node * pNext; //
}NODE, *PNODE; //NODE struct Node PNODE struct Node *
//
PNODE create_list(void); //
void traverse_list(PNODE pHead); //
bool is_empty(PNODE pHead); //
int length_list(PNODE); //
bool insert_list(PNODE pHead, int pos, int val); // pHead pos , val, pos 1
bool delete_list(PNODE pHead, int pos, int * pVal); // pos , pVal , pos 1
void sort_list(PNODE); //
int main(void)
{
PNODE pHead = NULL; // struct Node * pHead = NULL;
int val;
pHead = create_list(); //create_list() : , pHead
traverse_list(pHead);
//insert_list(pHead, -4, 33);
if ( delete_list(pHead, 4, &val) )
{
printf(" , : %d
", val);
}
else
{
printf(" ! !
");
}
traverse_list(pHead);
//int len = length_list(pHead);
//printf(" %d
", len);
//sort_list(pHead);
//traverse_list(pHead);
/* if ( is_empty(pHead) )
printf(" !
");
else
printf(" !
");
*/
return 0;
}
PNODE create_list(void)
{
int len; //
int i;
int val; //
//
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
{
printf(" , !
");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf(" : len = ");
scanf("%d", &len);
for (i=0; iPNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf(" , !
");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while (NULL != p)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("
");
return;
}
bool is_empty(PNODE pHead)
{
if (NULL == pHead->pNext)
return true;
else
return false;
}
int length_list(PNODE pHead)
{
PNODE p = pHead->pNext;
int len = 0;
while (NULL != p)
{
++len;
p = p->pNext;
}
return len;
}
void sort_list(PNODE pHead)
{
int i, j, t;
int len = length_list(pHead);
PNODE p, q;
for (i=0,p=pHead->pNext; ipNext)
{
for (j=i+1,q=p->pNext; jpNext)
{
if (p->data > q->data) // : a[i] > a[j]
{
t = p->data;// : t = a[i];
p->data = q->data; // : a[i] = a[j];
q->data = t; // : a[j] = t;
}
}
}
return;
}
// pHead pos , val, pos 1
bool insert_list(PNODE pHead, int pos, int val)
{
int i = 0;
PNODE p = pHead;
while (NULL!=p && ipNext;
++i;
}
if (i>pos-1 || NULL==p)
return false;
// p pos-1 , pos-1
//
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf(" !
");
exit(-1);
}
pNew->data = val;
// p
PNODE q = p->pNext;
p->pNext = pNew;
pNew->pNext = q;
return true;
}
bool delete_list(PNODE pHead, int pos, int * pVal)
{
int i = 0;
PNODE p = pHead;
while (NULL!=p->pNext && ipNext;
++i;
}
if (i>pos-1 || NULL==p->pNext)
return false;
// p pos-1 , pos
PNODE q = p->pNext; //q
*pVal = q->data;
// p
p->pNext = p->pNext->pNext;
// q
free(q);
q = NULL;
return true;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.