C言語の循環リンク表を実現する


本論文の例では、C言語の循環チェーンの具体的なコードを共有しています。参考にしてください。具体的な内容は以下の通りです。
注意事項:
1、循環チェーンに尾針を設定します。チェーンの操作中に尾のポインタがどんどん変化していくので、いくつかの関数のイメージには、ヘッドポインタを指すポインタが設定されています。及びチェーンの終了判定条件がqになるかどうかが尾ポインタに等しいかどうか。
2、注意伝達の実参は住所を取る必要があります。
3、循環チェーン表の利点は、ダブルチェーンの連結と、テール挿入の簡単さを実現することである(まず、結点の終点を新規作成し、次に、尾ポインタのnextドメインをこの新しい結点に向ける)
4、チェーンを作る時に、頭突き法ではなく、直接に頭突き法を使って、最後の尾の針を更新します。
コード:

#include<stdio.h>
#include<stdlib.h>
 
typedef struct Node
{
 int data;
 struct Node * next;
}Node, *LinkList;
 
LinkList Creat();
void Destroy(LinkList *L);
void Insert(LinkList *L, int val, int index);
void Delete(LinkList *L, int index);
void Traverse(LinkList L);
 
int main()
{
 LinkList L = Creat();
 Traverse(L);
 Insert(&L, 1, 5);
 printf("After inserting is :
"); Traverse(L); printf("After deleting is :
"); Delete(&L, 2); Traverse(L); Destroy(&L); Traverse(L); } LinkList Creat() { LinkList L = (LinkList)malloc(sizeof(Node));// L , L int n; L->data = -1; L->next = L;// , ! 。 printf("Please enter the number you want input:(>5)"); scanf_s("%d", &n); printf("input the number:
"); for (int i = 0; i < n; i++) { LinkList p = (LinkList)malloc(sizeof(Node)); scanf_s("%d", &p->data); p->next = L->next; L->next = p; L = p; } return L;// } void Destroy(LinkList *L) { LinkList q = (*L)->next->next; LinkList p; (*L) = (*L)->next; while (q != (*L)) { p = q->next; free(q); q = p; } (*L)->next = (*L); } void Insert(LinkList *L, int val, int index) { LinkList p = (LinkList)malloc(sizeof(Node)); p->data = val; LinkList q = (*L)->next; for (int i = 1; q != (*L) && i < index; i++) q = q->next; p->next = q->next; q->next = p; if (p == (*L)) (*L) = p; } void Delete(LinkList *L, int index) { LinkList q = (*L)->next, p; for (int i = 0; i < index; i++) q = q->next; p = q->next; q->next = p->next; free(p); } void Traverse(LinkList L) { LinkList q = L->next->next;// while (q != L) { printf("%d->", q->data); q = q->next; } printf("NULL
"); }
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。