数据结构课程设计 双向循环链表的实现 设计要求: (1)定义教材P35 所示“线性表的双向循环链表存储结构”,在此存储结构的基础上,实现如下操作。 (2)建立带头结点的双向循环链表L。 (3)在 L 中第 i 个位置之前插入新的元素 e,如教材P36 所示。 (4)在 L 中删除第 i 个元素,并用 e 返回其值,如教材P37 所示。 (5)将 L 逆置。 所选教材为严蔚敏的数据结构。 //CreateList_L.cpp //To create a LinkList #include
#include #include # define TRUE 1 # define FALSE 0 # define OK 1 # define ERROR 0 # define INFEASIBLE -1 # define OVERFLOW -2 typedef struct DuLNode { int data; struct DuLNode *prior; struct DuLNode *next; }DuLNode,*DuLinkList; // 初始条件:L 已存在。操作结果:返回 L 中数据元素个数 int ListLength(DuLinkList L) { int i=0; DuLinkList p=L->next; // p 指向第一个结点 while(p!=L) // p 没到表头 { i++; p=p->next; } return i; } // 由双链循环线性表L 的头结点出发,正序输出每个数据元素 void ListTraverse(DuLinkList L) { DuLinkList p=L->next; while(p!=L) { cout<data<<"\t"; p=p->next; } cout<prior; while(p!=L) { cout<data<<"\t"; p=p->prior; } cout<next=L->prior=L; cout<<"CreateList_L"< "; cin>>n; cout<<"Please input the data for DuLinkList Nodes: "<0;--i) { p=(DuLinkList)malloc(sizeof(DuLNode)); cin>>p->data; //Reverse order inputing for Creating a LinkList p->prior=L; p->next=L->next; L->next->prior=p; L->next=p; } if(n) { cout<