数据结构实验(2)

    科技2022-09-03  111

    数据结构实验

    PS:仅实验记录 题目:建立一个循环单链表,其节点有 prior,data 和 next 三个域,其中 data 为数据域,存放元素的有效信息,next 域为指针域,指向后继节点,prior 为指针域,它的值为 NULL。编写一个算法将此表改为循环双链表。

    #include<iostream> using namespace std; template <typename DataType> struct Node //创建结点 { DataType data; Node* prior, * next; }; template <typename DataType> class CirList { public: CirList() //构造函数 { first = new Node<DataType>; first->next = first; first->prior = NULL; } CirList(DataType a[], int n) //有参构造函数 { first = new Node<DataType>; first->next = first; first->prior = NULL; for (int i = 0; i < n; i++) { Node<DataType>* p = nullptr; p = new Node<DataType>; p->data = a[i]; p->next = first->next; first->next = p; } } ~CirList() //析构函数 { Node<DataType>* p = first->next; first = first->next; while (first != nullptr) { first = first->next; delete p; p = first; } } void print() //利用next正向打印 { Node <DataType>* p = first->next; for (p = first->next; p != first; p = p->next) { cout << "\t" << p->data; } cout << endl; } //单链改双链操作 void Change_() { Node<DataType>* p, * q; p = first; q = p->next; while (q != first) { q->prior = p; p = q; q = q->next; } q->prior = p; } //测试是否成功将单链改为双链,利用prior反向打印 void Re_print() { Node <DataType>* p = first->prior; for (p = first->prior; p != first; p = p->prior) { cout << "\t" << p->data; } cout << endl; } private: Node<DataType>* first; }; //函数测试代码 int main() { int t[10] = { 2,5,7,2,1,6,8,2,3,9 }; CirList<int> C(t, 10); cout << "\n利用next正向打印链表:"; C.print(); cout << "--------------------------------------------------------------"; cout << "\n执行将循环单链表改成循环双链" << "\n"; cout << "--------------------------------------------------------------"; C.Change_(); //调用改变函数 cout << "\n利用prior反向打印列表:"; C.Re_print(); return 0; }
    Processed: 0.008, SQL: 9