显示反向顺序,但不显示非反向顺序 c++

Displays reverse order but not the non-reverse order c++

本文关键字:显示 顺序 c++      更新时间:2023-10-16

它不会以非反向顺序 (cde( 显示字符串字符数组,但会以相反顺序 (edc( 显示数组。你能帮忙解释为什么它不显示 cde 吗?

我尝试更改变量名称,但我是一名新程序员,所以我真的不知道该怎么做。

#include <iostream>
using namespace std;
// of linked list in reverse order
// Structure of a node
template<class T>
struct listrec2
{
    T value; //corresponds to data
    listrec2 *next; //points to next node
    listrec2 *prev; //points to previous nod
};
template<class T>
void downwardSearch(listrec2<T> *head)
//traverse from start of linked list to end of linked list
//print out value of each node along way
{
    char s[] = { 'c', 'd', 'e' };
// if you wanted to make it in the function listrec2<T> *tail;
    listrec2<T> *current;
    listrec2<T> *tail;
    listrec2<T> value;
    head = tail = new listrec2<T>; // make a new node
    head->value = s[0];
    tail = NULL;
    head = NULL;
    for (int i = 1; i < strlen(s); i++)
    {
        current = new listrec2<T>; //makes new node
        current->value = s[i];
        current->next = NULL;
        current->prev = tail;
        tail->next = current;
        tail = current;
    }
    listrec2<T> *ptr;
    ptr = head;
    cout << "The array in non-reverse order: " << endl;
    while (ptr != NULL)
    {
        cout << ptr->value;
        ptr = ptr->next;
    }
}
template<class T>
void upwardSearch(listrec2<T> *tail)
{
    char s[] = { 'c', 'd', 'e' };
// if you wanted to make it in the function listrec2<T> *tail;
// listrec2<T> *temp;
    listrec2<T> *current2;
    listrec2<T> *tail2;
    listrec2<T> *value;
    listrec2<T> *head2;
    head2 = tail = new listrec2<T>; // make a new node
    head2->value = s[0];
    tail2 = NULL;
    head2 = NULL;
    for (int i = 1; i < strlen(s); i++)
    {
        current2 = new listrec2<T>;
        current2->value = s[i];
        current2->next = NULL;
        current2->prev = tail;
        tail->next = current2;
        tail = current2;
    }
    listrec2<T> *ptr2;
    ptr2 = tail;
    cout << "The array in reverse order or backwards: " << endl;
    while (ptr2 != NULL)
    {
        cout << ptr2->value;
        ptr2 = ptr2->prev;
    }
    cout << endl;
}
int main()
{
//missing info here
    listrec2<char> *head;
    listrec2<char> *tail;
    upwardSearch(head);
    downwardSearch(tail);
    return 0;
}

预期结果为:反转前的数组:cde反转后的数组:EDC。

这是使用 create_list、search_up、search_down 和 destory_list 函数来实现的一种方法。 我尝试使用更具描述性的变量名称。 我不喜欢listrec2因为它非常令人困惑。 这让我想到了第二个节点,但事实并非如此。 它是一种节点类型。

此外,大写您的类型(例如 Node(是一个很好的兔子。 然后,您可以为对象使用小写版本(例如节点节点;

#include <iostream>
using namespace std;
// of linked list in reverse order
// Structure of a Node
template<class T>
struct Node {
    T value; //corresponds to data
    Node *next; //points to next Node
    Node *prev; //points to previous nod
};
template<typename T>
void CreateList(Node<T> *&head, Node<T> *&tail, T value_array[], int array_size)
{
  head = nullptr;
  tail = nullptr;
  for (int i = 0; i < array_size; i++) {
    // Create new node and add node to the end of the list
    Node<T> *node = new Node<T>();
    node->next = nullptr;
    node->prev = tail;
    if (head == nullptr) {
      head = tail = node;
    } else {
      tail->next = node;
      tail = node;
    }
    node->value = value_array[i];
  }
}
template<class T>
void downwardSearch(Node<T> *head)
//traverse from start of linked list to end of linked list
//print out value of each Node along way
{
  Node<T> *ptr = head;
  cout << "The array in forward order: " << endl;
  while (ptr != nullptr) {
    cout << ptr->value;
    ptr = ptr->next;
  }
}
template<class T>
void DestroyList(Node<T> *head)
{
  Node<T> *ptr;
  while (head != nullptr) {
    ptr = head->next;
    delete head;
    head = ptr;
  }
}
template<class T>
void upwardSearch(Node<T> *tail)
{
  Node<T> *ptr = tail;
  cout << "The array in reverse order or backwards: " << endl;
  while (ptr != nullptr) {
    cout << ptr->value;
    ptr = ptr->prev;
  }
  cout << endl;
}
int main()
{
  char s[] = {'c', 'd', 'e'};
  Node<char> *head;
  Node<char> *tail;
  CreateList<char>(head, tail, s, 3);
  upwardSearch(tail);
  downwardSearch(head);
  DestroyList(head);
  head = tail = nullptr;
  return 0;
}