データ構造学習ノート (3) 線形テーブル (3)

データ構造学習ノート (3) 線形テーブル (3)

循環リンクリスト

循環リンクリストの概念

  循環リンクリストの最初のノードと最後のノードがリンクされます。循環リンク リストの最初のノードは最後のノードの前にあり、その逆も同様です。

循環リンクリストの C 言語実装

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct LNode
{
    
    
    int data;
    struct LNode *next;
}LinkList, LNode;
LinkList *creat()
{
    
    
    LinkList *head, *p1, *p2;
    int i;
    if ((head = (LinkList *)malloc(sizeof(LNode))) == NULL)
    {
    
    
        printf("Error");
        exit(0);
    }
    p1 = p2 = head;
    printf("输入创建链表的长度:");
    scanf("%d, &head->data");//创建链表,带头结点,头结点数据域表示输入的个数
    if(head->data==0)
    {
    
    
        head->next = NULL;
        printf("已创带头结点的空链表");
    }
    else
    {
    
    
        printf("输入数据:\n");
        for (i = 0; i < head->data;i++)
        {
    
    
            if((p1=(LinkList*)malloc(sizeof(LNode)))==NULL)
            {
    
    
                printf("Error");
                exit(0);
            }
            scanf("%d", &p1->data);
            p2->next = p1;
            p2 = p1;
        }
        p1->next = head;
    }
    return (head);
}

void print(LinkList *head)
{
    
    
    LinkList *p;
    p = head->next;
    while(p!=head)
    {
    
    
        printf("%d", p->data);
        p = p->next;
    }
    printf("\n");
}
void main()
{
    
    
    LinkList *head;
    head = creat();
    print(head);
}

二重リンクリスト

二重リンクリストの概念

  二重リンクリストには、次のノードへのポインタだけでなく、前のノードへのポインタも存在します。このようにして、任意のノードから前のノードにアクセスしたり、次のノードやリンク リスト全体にアクセスしたりすることができます。

  二重リンク リストの各ノードには、2 つのポインター フィールドと 1 つのデータ フィールドがあります。

C言語による二重リンクリストの実装

#include <stdio.h>
#include <malloc.h>

typedef struct DuLNode
{
    
    
    int i;
    struct DuLNode *next, *prior;
} DuLNode, *DuLinkList;

DuLNode *create_list()
{
    
    
    int a[] = {
    
    1, 2, 3, 4, 5};
    int j;
    DuLNode *head, *p1, *p2;
    p2 = head = (DuLinkList)malloc(sizeof(DuLNode));
    head->next = head->prior = NULL;
    for (j = 4; j >= 0;j--)
    {
    
    
        p1 = (DuLinkList)malloc(sizeof(DuLNode));
        p1->prior = head;
        p1->next = head->next;
        head->next = p1;
    }
    return head;
}

DuLNode *insert_list(DuLNode *head, int i, int num)
{
    
    
    DuLNode *p, *q;
    int j;
    for (j = 1, p = head->next; j < i && p->next;j++)
    {
    
    
        q = p->next;
        q->prior = p;
        p = q;
    }
    q = (DuLinkList)malloc(sizeof(DuLNode));
    q->i = num;
    q->prior = p->prior;
    q->next = p;
    p->prior->next = q;
    p->prior = q;
    return head;
} 

おすすめ

転載: blog.csdn.net/I_m_Gagaga/article/details/127750286