양 방향 링크 와 순환 링크
4006 단어 데이터 구조
양 방향 링크 와 단일 링크 의 차 이 는 바로 하나의 전구 가 더 생 긴 데 있다.단일 체인 표를 볼 필요 가 있 는 사람 은 홈 페이지 에서 찾 습 니 다.
양 방향 링크 코드 는 다음 과 같 습 니 다.
typedef class Node
{
public:
int data;
Node *next;
Node *pre;
}node;
class doublelist
{
public:
doublelist()
{
head = NULL;
count = 0;
}
~doublelist()
{
}
Node *buyNode(int val,Node *next,Node * pre)
{
Node *p = new Node();
p->data = val;
p->next = next;
p->pre = pre;
return p;
}
void Insert(int pos, int val)
{
if (pos < 0 || pos > count)
{
cout << "the pos is error!" << endl;
return;
}
if (head == NULL)
{
head = buyNode(val, NULL, NULL);
count++;
return;
}
if (pos == 0)
{
Node *s = buyNode(val, head, NULL);
head = s;
}
else
{
Node *p = head;
Node *q = p->next;
while (pos - 1 > 0)
{
p = p->next;
q = q->next;
pos--;
}
Node *s = buyNode(val, q, p);
p->next = s;
}
count++;
}
void Inserthead(int val)
{
Insert(0, val);
}
void Inserttail(int val)
{
Insert(count, val);
}
void Delete(int pos)
{
if (pos > count || pos < 0)
{
cout << "the pos is error!" << endl;
return;
}
Node *p = head;
Node *q = p->next;
if (pos == 0)
{
free(p);
head = q;
}
else if (pos == 1)
{
p->next = q->next;
}
else
{
while (pos - 1 > 0)
{
p = p->next;
pos--;
}
p->pre->next = p->next;
}
count--;
}
void Deletehead()
{
Delete(0);
}
void Deletetail()
{
Delete(count);
}
int getcount()
{
return count;
}
void show()
{
Node *p = head;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
private:
Node *head;
int count;
};
int main()
{
doublelist d;
for (int i = 0; i < 10; i++)
{
d.Inserttail(i);
}
d.show();
d.Delete(10);
d.show();
return 0;
}
순환 링크
순환 링크 와 싱글 링크 의 차 이 는 순환 링크 의 첫 번 째 와 연결 되 어 있다.
순환 링크 의 코드 는 다음 과 같 습 니 다.
class Node
{
public:
Node *next;
int data;
};
class CycleList
{
public:
CycleList()
{
head = NULL;
count = 0;
}
~CycleList()
{
}
Node *buyNode(int val,Node *next)
{
Node* p = new Node();
p->data = val;
if (next == NULL)
{
p->next = p;
}
else
{
p->next = next;
}
return p;
}
void Insert(int pos, int val)
{
if (pos < 0 || pos > count)
{
cout << "the pos is error!" << endl;
return;
}
if (head == NULL)
{
head = buyNode(val, NULL);
count++;
return;
}
Node *p = head;
if (pos == 0)
{
pos = count;
while (pos - 1> 0)
{
p = p->next;
pos--;
}
Node *s = buyNode(val, p->next);
p->next = s;
head = s;
}
else
{
while (pos - 2 > 0)
{
p = p->next;
pos--;
}
Node *s = buyNode(val, p->next);
p->next = s;
}
count++;
}
void Inserthead(int val)
{
Insert(0, val);
}
void Inserttail(int val)
{
Insert(count, val);
}
void Delete(int pos)
{
if (pos < 0 || pos > count)
{
cout << "the pos is error" << endl;
return;
}
Node *p = head;
Node *q = p->next;
if (pos == 1)
{
free(head);
head = q;
}
else
{
while (pos - 2 > 0)
{
p = p->next;
q = q->next;
pos--;
}
p->next = q->next;
free(q);
}
}
void Deletehead()
{
Delete(0);
}
void Deletetail()
{
Delete(count);
}
void show()
{
Node *p = head;
Node *q = p;
while (p->next != q)
{
cout << p->data << " ";
p = p->next;
}
cout << p->data << endl;
}
private:
Node *head;
int count;
};
int main()
{
CycleList c;
for (int i = 0; i < 3; i++)
{
c.Inserthead(i);
}
c.Insert(2, 10);
c.show();
c.Deletehead();
c.show();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.