데이터 구조 헤드 노드 순환 링크
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#define FALSE 0
#define TRUE 1
typedef int LinkData;
typedef struct _node
{
LinkData data;
struct _node * next;
}Node;
//
Node * Create_List();
//
int Insert_Last(Node *h, LinkData data);
//
int Insert_Head(Node *h, LinkData data);
// pos
int Insert_Pos(Node *h, int pos, LinkData data);
// pos
int Delete_Pos(Node* h, int pos);
//
int Reverse_List(Node *head);
//
int Delete_Data(Node*, LinkData data);
// : ,
int Find_Element(Node* h, LinkData data, int *x);
// :
int Get_Element(Node* s, int pos, int *x);
int Get_Len(Node * head);
//
int Clean_List(Node * head);
//
int Destroy(Node *);
void Display(Node *h);
#endif
#include "LinkList.h"
#include
#include
Node * Create_List()
{
Node *head = (Node*)malloc(sizeof(Node)/sizeof(char));
if (head == NULL)
return NULL;
head->next = head; //
return head;
}
int Insert_Head(Node *h, LinkData data)
{
if (h == NULL)
return FALSE;
Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return FALSE;
}
node->data = data;
node->next = h->next;
h->next = node;
return TRUE;
}
int Insert_Last(Node *h, LinkData data)
{
if (h == NULL)
return FALSE;
Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return FALSE;
}
node->data = data;
node->next = h;
Node* tmp = h;
while (tmp->next != h)
{
tmp = tmp->next;
}
tmp->next = node;
return TRUE;
}
int Insert_Pos(Node *h, int pos, LinkData data)
{
if (h == NULL || pos < 1)
return FALSE;
//
Node *tmp = h;
int i;
for (i = 0; i < pos-1; i++)
{
if (tmp == h)
break;
tmp = tmp->next;
}
if (tmp == h) //
{
printf("
");
return FALSE;
}
Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return FALSE;
}
node->data = data;
node->next = tmp->next;
tmp->next = node;
return TRUE;
}
int Delete_Pos(Node* h, int pos)
{
if (h == NULL || pos < 1)
return FALSE;
//
Node *tmp = h;
int i;
for (i = 0; i < pos-1; i++)
{
if (tmp->next == h)
break;
tmp = tmp->next;
}
if (tmp->next == h) //
{
printf("
");
return FALSE;
}
Node *p = tmp->next;
tmp->next = p->next;
free(p);
return TRUE;
}
int Reverse_List(Node *h)
{
// h->next
// h->next->next
if (h == NULL || h->next == h || h->next->next == h)
return FALSE;
Node *pre = h->next;
Node *cur = h->next->next;
Node *tmp;
while (cur == h)
{
tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
h->next->next = h;
h->next = pre;
return TRUE;
}
int Delete_Data(Node* h, LinkData data)
{
if (h == NULL)
return FALSE;
Node *tmp = h;
while (tmp->next != h)
{
if (tmp->next->data == data)
break;
tmp = tmp->next;
}
if (tmp->next == h)
return FALSE;
Node *p = tmp->next;
tmp->next = p->next;
free(p);
return TRUE;
}
int Find_Element(Node* h, LinkData data, int *x)
{
if (h == NULL)
return FALSE;
Node *tmp = h->next;
int k = 1;
while (tmp != h)
{
if (tmp->data == data)
{
*x = k;
return TRUE;
}
k++;
tmp = tmp->next;
}
return FALSE;
}
int Get_Element(Node* h, int pos, int *x)
{
if (h == NULL || pos < 1)
return FALSE;
int i;
Node *tmp = h;
for (i = 0; i < pos; i++)
{
if (tmp == h)
break;
tmp = tmp->next;
}
if (tmp == h)
return FALSE;
else
*x = tmp->data;
return TRUE;
}
int Get_Len(Node * h)
{
if (h == NULL)
return 0;
Node *tmp = h;
int count = 0;
while (tmp->next != h)
{
count++;
tmp = tmp->next;
}
return count;
}
int Clean_List(Node * h)
{
if (h == NULL)
return FALSE;
Node *tmp = h;
while (tmp->next != h)
{
Delete_Pos(h, 1);
}
return 0;
}
void Display(Node *h)
{
if (h == NULL)
return;
int count = 0;
Node *tmp = h->next;
while (tmp != h)
{
if (count++ % 4 == 0)
printf ("
");
printf ("%8d", tmp->data);
tmp = tmp->next;
}
printf ("
");
}
int Destroy(Node *h)
{
if (h == NULL)
return FALSE;
Clean_List(h);
free(h);
return TRUE;
}
#include
#include "LinkList.h"
int main()
{
//
Node* head = Create_List();
if (head == NULL)
{
printf("
");
return -1;
}
int i;
for (i = 0; i < 10; i++)
{
Insert_Head(head, i);
}
#if 0
for (i = 0; i < 10; i++)
{
Insert_Head(head, i);
}
Insert_Pos(head, 5, 1000);
Insert_Pos(head, 1, 2000);
Insert_Pos(head, 22, 2000);
Insert_Pos(head, 24, 2000);
Insert_Pos(head, 26, 2000);
Delete_Pos (head, 21);
Reverse_List(head);
#endif
Delete_Data(head, 0);
int x;
Find_Element(head, 7, &x);
Get_Element(head, 8, &x);
printf ("%d
", x);
printf ("%d
", Get_Len(head));
Display(head);
Clean_List(head);
printf (" :
");
Display(head);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.