zoukankan      html  css  js  c++  java
  • 面向对象的链表

    描述

    已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保持线性表的有序性!

    样例输入

    5
    12 23 34 45 56
    30

    样例输出

    12 23 30 34 45 56 

    以前链表的写法都是面向过程的,而面向对象的写法使得程序更具简洁性,当然,更重要的是OOP的思想

      1 //: 在顺序表中插入元素
      2 #include <iostream>
      3 
      4 using namespace std;
      5 
      6 class MyClass {
      7 public:
      8   struct Link {
      9     int   data;
     10     Link* next;
     11   }*head, *tail;
     12   
     13   MyClass();
     14   
     15   void push(const int&);
     16   void insert_value(const int&);
     17   void print_list();
     18   void cleanUp();
     19 };
     20 
     21 MyClass::MyClass() {
     22   head = tail = NULL;
     23 }
     24 
     25 void MyClass::push(const int& dat) {
     26   Link* ptr = new Link;
     27   ptr->data = dat;
     28   ptr->next = NULL;
     29   if (head == NULL) {
     30     head = tail = ptr;
     31   }
     32   else {
     33     tail->next = ptr;
     34     tail = ptr;
     35   }
     36   return ;
     37 }
     38 
     39 void MyClass::insert_value(const int& dat) {
     40   Link* front = NULL;
     41   Link* back  = head;
     42   bool  isInserted = false;
     43   
     44   while (isInserted == false) {
     45     if (back->data >= dat) {
     46       Link* newNode = new Link;
     47       newNode->data = dat;
     48       newNode->next = back;
     49       if (front == NULL)
     50         head = newNode;
     51       else
     52         front->next = newNode;
     53 
     54       isInserted = true;
     55     }
     56     front = back;
     57     back  = back->next;
     58   }// End of While
     59   return ;
     60 }
     61 
     62 void MyClass::print_list() {
     63   bool  isSpace = false;
     64   Link* ptr = head;
     65   while (ptr != NULL) {
     66     if (isSpace) {
     67       cout << ' ' << ptr->data;
     68     }
     69     else {
     70       isSpace = true;
     71       cout << ptr->data;
     72     }
     73     ptr = ptr->next;
     74   }// End of While
     75   cout << endl;
     76   return ;
     77 }
     78 
     79 void MyClass::cleanUp() {
     80   while (head != NULL) {
     81     Link* oldHead = head;
     82     head = head->next;
     83     delete oldHead;
     84   }// End of While
     85 }
     86 
     87 int main() {
     88   int listLen, dat;
     89   
     90   while (cin >> listLen) {
     91     MyClass solver;
     92     for (int i = 0; i < listLen; ++i) {
     93       cin >> dat;
     94       solver.push(dat);
     95     }
     96     
     97     cin >> dat;
     98     solver.insert_value(dat);
     99     solver.print_list();
    100     solver.cleanUp();
    101   }// End of While
    102   return 0;
    103 } ///:~
  • 相关阅读:
    SDUT 2128 树结构练习——排序二叉树的中序遍历
    SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
    SDUT 3341 数据结构实验之二叉树二:遍历二叉树
    总结:串和数组的学习
    SDUT 3347 数据结构实验之数组三:快速转置
    SDUT 3348 数据结构实验之数组二:稀疏矩阵
    SDUT 1500 Message Flood
    SDUT 2463 学密码学一定得学程序
    SDUT 2125 数据结构实验之串二:字符串匹配
    mybatis学习(七)(choose的学习)
  • 原文地址:https://www.cnblogs.com/yewei/p/2939127.html
Copyright © 2011-2022 走看看