从数组参数

时间:2018-03-04 00:49:32

标签: c++11 data-structures parameters constructor doubly-linked-list

C ++ noob报告。我正在尝试编写一个函数,它将使用存储在两个不同数组中的值创建和初始化双向链表。这是我的链表类的设置方式:

class node {
   public:
   node *prev;
   node *next;
   int key;
   char type;
};

以下是我的dList类(包含改变我的链表的各种函数)的设置方法:

class dList {
private:
   node *head; // dummy head
   node *tail; // dummy tail

public:
   dList() { // default constructor, creates empty list
     head = tail = NULL;
   }

   ~dList() { // deconstructor
     node *ptr = head;
     while (head != NULL) {
       head = head->next;
       delete ptr;
     }
     tail = NULL;
   }

   dList(int arrayNums[], char arrayChars[], int size); // parametrized constructor, initialize list w/ contents of arrays

   void addFront(int k, char t); // creates new node at front of list

   void addBack(int k, char t); // creates new node at back of list

   node *search(int k); // searches list for occurence of int parameter and returns pointer to node containing key

   void find(char t); // outputs all keys that have type equal to character parameter, front to back

   void moveFront(node* ptr); // moves node pointed to by parameter to front of list

   void moveBack(node* ptr); // moves node pointed to by parameter to back of list

   void out(int num, char = 'f'); // outputs first int elements of list, starting at front or back depending on char parameter

   void sort(); // peforms a quick or mergesort on items; list should be in increasing order based on integer key

};

我需要帮助实现我的参数化构造函数。有人能告诉我,我现在的功能是否正确写入?我认为是,但是当我运行我的程序时,它会永远运行 - 这是一个明显的问题。这是我的功能原样:

dList::dList(int arrayNums[], char arrayChars[], int size) { 
  node *newNode = NULL;

  for (int i = 0; i < size; i++) {

    if (head == NULL) {
      newNode = new node;
      newNode->key = arrayNums[i];
      newNode->type = arrayChars[i];
      newNode->prev = NULL;
      newNode->next = NULL;
      head = newNode;
      tail = newNode;
    }

    else { // needs work!
      newNode = new node;
      newNode->key = arrayNums[i];
      newNode->type = arrayChars[i];
      newNode->prev = tail;
      tail->next = newNode;
      tail = newNode;
    }

    if (i == (size - 1)) {
      tail->next = NULL;
    }
  }
}

非常感谢!

编辑:这是我的main.cpp(我用来测试我的dList.cpp文件的代码)

#include <iostream>
using namespace std;
#include "dList.cpp"
#define SMALL 200
#define MAX 100000
#define ROUNDS 100
int main(){
    int i, x[MAX];
    char ch[MAX];

    for(i=0;i<SMALL;i++) {
      x[i] = 2 * (SMALL - i);
      ch[i] = 'a' + (i % 26);
    }
    dList A(x,ch,SMALL), B;
    A.out(10);
    node *tmp = A.search(2*SMALL-8);
    A.moveFront(tmp);
    A.out(10);
    A.moveBack(tmp);
    A.out(10);
    A.find('b');
    A.sort();
    A.out(10);
    A.out(10,'b');
    A.addBack(500,'d');
    A.addFront(501,'z');
    A.out(10);
    A.out(10,'b');
    B.addFront(1,'a');
    B.addBack(2,'b');
    B.out(2);

    for(int j=0; j<ROUNDS; j++){
      cout << endl << "round " << j << endl;
      for(i=0;i<MAX;i++) {x[i] = 2*MAX-i; ch[i] = 'a'+ (i%26);}
       dList A(x,ch,MAX);
       node *tmp = A.search(2*MAX-8);
       A.moveFront(tmp);
       A.moveBack(tmp);
       A.sort();
       A.out(10);
       A.out(10,'b');
    }
}

0 个答案:

没有答案