如何按升序排序创建双向链接的整数列表?

时间:2016-03-15 14:11:02

标签: c++

我很难完成代码以完成以下步骤:

  1. 如何读取正整数文件(> 0)?
  2. 如何按升序排序创建双向链接的整数列表?
  3. 如何编写一个方法以升序或降序打印整个列表(输入参数'A'或'D'告诉打印方向)?
  4. 如果要添加的号码已经在列表中,或者如果他们要删除不在列表中的号码,则如果该号码不在列表中,如何通知用户。
  5. 运行程序时没有错误,只是尝试解决上述4个步骤。

    这是我到目前为止所做的事情

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    struct  node
    {
        int number; 
        node *next; 
    };
    bool isEmpty(node *head); 
    char menu(); 
    void insertAsFirstElement(node *&head, node *&last, int number);
    void inser(node*&head, node*&last, int number);
    void remove(node *&head, node *&last);
    void showlist(node *current);
    int numIntElement(ifstream&x);
    int main() {
    
        string filename;
        cout << " Please enter the name of the file = "; 
        cin >> filename; 
        ifstream myfile; 
        myfile.open(filename); 
        if (!myfile.is_open()) {
            cout << endl << " failed to open file, check that it exists and you have access \n" << "\n" << endl; 
    
        }
        else if (myfile.is_open())
        {
            ifstream x;
            numIntElement(x); 
            cout << " File exists \n";
            ////
            node * head = NULL;
            node *last = NULL;
            char choice;
            int number;
            do {
                choice = menu();
                switch (choice)
                {
                case '1':
                    cout << " Please enter number : ";
                    cin >> number;
                    inser(head, last, number);
                    break;
                case '2':
                    remove(head, last);
                case '3':
                    showlist(head);
                    break;
                default:
                    break;
                }
            } while (choice != '4');
            {
    
            }
        }
    
        system("pause");
        return 0; 
    }
    int numIntElement(ifstream&x) {
    
        int n = 0;
        int m; 
        ifstream myfile("file.txt");
        int countsingfie = 0;
    
        while (!myfile.eof())
        {
            myfile >> n;
            countsingfie += n;
            if (countsingfie == 0) {
                cout << "Error : file exist but no data " << endl;
            }
            cout << "total number " << countsingfie << "\n" << endl;
            return countsingfie;
        }
    }
    bool isEmpty(node *head) {
        if (head == NULL) {
            return true; 
        }
        else
        {
            return false;
        }
    }
    char menu() {
        char choice; 
        cout << " Main Menu \n"; 
        cout << " 1 . Add a number \n";
        cout << " 2 . Delete a number from the list \n";
        cout << " 3 . Show the list \n"; 
        cout << " 4.  Exit \n";
        cin >> choice; 
        return choice;
    }
    void insertAsFirstElement(node *&head, node *&last, int number) {
        node *temp = new node; 
        temp->number = number; 
        temp->next = NULL; 
        head = temp; 
        last = temp; 
    }
    void inser(node*&head, node*&last, int number) {
        if (isEmpty(head)>0){
            insertAsFirstElement(head, last, number); 
        }
        else if (isEmpty(head) < 0)
        {
            cout << " Please enter a number above 0 " << endl;
        }
        else
        {
            node *temp = new node;
            temp->number = number;
            temp->next = NULL;
            last->next = temp;
            last = temp;
        }
    }
    void remove(node *&head, node *&last) {
        if (isEmpty(head)) {
            cout << " Sorry, The list is already empty \n"; 
    
        }
        else if (head == last)
        { 
            delete head; 
            head = NULL;
            last = NULL; 
    
        }
        else
        {
            node *temp = head; 
            head = head->next; 
            delete temp; 
        }
    }
    void showlist(node *current) {
    
        if (isEmpty(current)) {
            cout << " The list is empty \n";
        }
        else
        {
            cout << " The list contains: \n "; 
            while (current != NULL)
            {
                cout << current->number << endl; 
                current = current->next; 
    
            }
        }
    }
    

0 个答案:

没有答案