双向循环链表基本操作

    xiaoxiao2021-03-25  68

    #include <stdio.h> #include <stdlib.h> typedef struct Node { int Element; struct Node *Prior; struct Node *Next; }Node,*DuLinkList; DuLinkList  ListInit(DuLinkList L,int n){ int i; L = (DuLinkList)malloc(sizeof(Node)); L->Next = L; L->Prior = L; DuLinkList p; for(i=0;i<n;i++){ p = (DuLinkList)malloc(sizeof(Node)); p->Element = i; p->Next = L->Next; L->Next->Prior = p; p->Prior = L; L->Next = p; } return L; } void  ListInsert(DuLinkList L,int i,int e){ DuLinkList p=L; int j=0; while(p&&j<i){ p = p->Next; j++; } DuLinkList pe; pe = (DuLinkList)malloc(sizeof(Node)); pe->Element = e; pe->Next = p->Next; p->Next->Prior = pe; p->Next = pe; pe->Prior = p; } void ListDelete(DuLinkList L,int i){ DuLinkList p=L; int j=0; while(p&&j<i){ p = p->Next; j++; } DuLinkList pd = p->Next; pd->Next->Prior = p; p->Next = pd->Next; free(pd); } void ListShow(DuLinkList L,int n){ DuLinkList p; p = L->Next; int i=0; while(p->Next!=NULL&&i<n){ printf("%d\n",p->Element); p = p->Next; i++; } } void ListShowRe(DuLinkList L,int n){ DuLinkList p; p = L->Prior; int i=0; while(p->Prior!=NULL&&i<n){ printf("%d\n",p->Element); p = p->Prior; i++; } } int main(){ DuLinkList L; L = ListInit(L,10); ListShow(L,10); ListShowRe(L,10); ListInsert(L,2,222); ListShow(L,10); printf("-----\n"); ListDelete(L,2); ListDelete(L,2); ListShow(L,9); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-40155.html

    最新回复(0)