資料結構基礎篇-------4. 雙向迴圈連結串列的建立和操作
阿新 • • 發佈:2018-12-17
/* * 雙向迴圈連結串列的建立及操作 * 2018.10.23 * @L.F * * */ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int Datatype; typedef struct Node { Datatype Data; struct Node *Prior; struct Node *Next; }DoubList; DoubList *DoubListCreate()//定義空的迴圈連結串列 { DoubList *h = (DoubList *)malloc(sizeof(DoubList)); h->Prior = h; h->Next = h; return h; } void DoubListInsert(DoubList *h, Datatype Value)//插入資料 { DoubList *Temp = (DoubList *)malloc(sizeof(DoubList)); Temp->Data = Value; DoubList *Pnext = h->Next; Temp->Next = Pnext; Pnext->Prior = Temp ; h->Next = Temp; Temp->Prior = h; return ; } int DoubListInsertPos(DoubList *h,int pos,Datatype Value)//按照位置插入 { int j =0; DoubList *p, *s; p = h; while(j<pos &&p->Next != h) { p = p->Next; j++; } if(j != pos-1) return 0; p =p->Next; s=(DoubList *)malloc(sizeof(DoubList)); s->Data = Value; s->Prior = p->Prior; p->Prior->Next = s; s->Next = p; p->Prior = s; return 0; } int DoubListDelete(DoubList *h, int pos)//按照位置刪除結點 { int j =0; DoubList *p; p = h; while(j < pos &&p->Next != h) { p =p->Next; j++; } if(j != pos || pos == 0) return 0; p->Prior->Next = p->Next; p->Next->Prior = p->Prior; return 0; } void DoubListShow(DoubList *h) { DoubList *p = h; while(h->Next != p) { h = h->Next; printf("%d ", h->Data); } putchar(10); h = p; while(h->Prior != p) { h = h->Prior; printf("%d ", h->Data); } putchar(10); return ; } int main(int argc, const char *argv[]) { DoubList *h = DoubListCreate(); printf("-------------------------------\n"); DoubListInsert(h,10); printf("-------------------------------\n"); DoubListInsert(h,20); printf("-------------------------------\n"); DoubListShow(h); printf("-------------------------------\n"); DoubListDelete(h,1); DoubListShow(h); DoubListInsertPos(h,3,90); DoubListInsertPos(h,4,80); DoubListInsertPos(h,5,70); DoubListInsertPos(h,6,60); DoubListInsertPos(h,7,50); DoubListInsertPos(h,8,40); DoubListShow(h); return 0; }