這是一項家庭作業,我已經編寫了大部分代碼,唯一無法弄清楚的是我必須有一個遞歸函數來排序鏈接列表按升序排列,遞歸函數按降序排列鏈接列表。我很迷茫。鏈接列表的遞歸遞增和遞歸降序功能
這是我的整個代碼。
using namespace std;
struct ListNode;
typedef ListNode* ListPtr;
struct ListNode
{
int number;
ListPtr next;
ListNode(int value, ListPtr ptr = NULL)
{
number = value;
next = ptr;
}
};
char Menu();
void Add(ListPtr &, int);
void Delete(ListPtr &, int);
void Ascend(ListPtr &);
void Descend(ListPtr &);
void Print(ListPtr &);
void DeleteList(ListPtr &);
int main()
{
ListPtr head = NULL;
char answer;
int input;
answer = Menu();
while(answer != 'Q')
{
if(answer == 'A')
{
cout << "Please enter in an integer: ";
cin >> input;
Add(head, input);
}
else if(answer == 'D')
{
cin >> input;
Delete(head, input);
}
else if(answer == 'P')
{
Ascend(head);
}
else if(answer == 'O')
{
Descend(head);
}
else if(answer == 'N')
{
Print(head);
}
else
{
cout << "Incorrect input, please try again.\n";
}
answer = Menu();
}
DeleteList(head);
return 0;
}
char Menu()
{
char uinput;
cout << "Please enter in one of the following:\n";
cout << "A: Add an item to the end of the list.\n";
cout << "D: Delete an item from the list.\n";
cout << "P: Print the list in ascending order.\n";
cout << "O: Print the list in descending order.\n";
cout << "N: Display the number of items in the list.\n";
cout << "Q: Quit.\n";
return toupper(uinput);
}
void Add(ListPtr &start, int item)
{
if(start->number > item || start == NULL)
start = new ListNode(item, start);
else
Add(start->next, item);
}
void Delete(ListPtr &start, int item)
{
if(start != NULL)
{
if(start->number == item)
ListPtr cur = start;
start = start->next;
delete cur;
}
else
{
Delete(start->next, item);
}
}
void Ascend(ListPtr &start)
{
}
void Descend(ListPtr &start)
{
}
void Print(ListPtr &start)
{
ListPtr cur = start;
int count = 0;
if(cur == NULL)
{
cout << "The list is empty.\n";
}
else
{
if(cur != NULL)
{
if(count % 10 == 0)
cout << endl;
cout << setw(5) << cur->number;
cur = cur->next;
count++;
}
}
cout << endl;
}
void DeleteList(ListPtr &start)
{
if(start != NULL)
{
DeleteList(start->next);
cout << "Deleting item " << start->number << endl;
delete start;
}
}
歡迎來到SO!特別是有這麼多的代碼,格式化它一貫將幫助人們閱讀它來幫助你。此外,一定要解釋什麼是不工作,你試過什麼等。 – J0e3gan
你的問題到底是什麼?函數的邏輯?您是否熟悉遞歸函數以及如何編寫一個? –
Sup的傢伙,抱歉,我很新,如何寫出來,我在一個C++編程2類,編程1和2都是入門級。問題是我不知道如何編寫這兩個部分,升序函數應該將列表中的數字按升序打印出來,而降序函數按降序排列。我只允許使用一個循環(我的菜單功能),所以這兩個函數必須遞歸。我們已經完成了一些遞歸任務,因此我在基本層面上理解了它們,但是我們只是開始鏈接列表,所以將它與遞歸結合起來會讓人困惑。 – Sayynt