您将获得一个列表L和另一个列表P,其中包含按升序排序的整数。操作printLots(L,P)
将打印L中由P指定的位置中的元素。例如,如果P = 1, 3, 4, 6
,则打印L中positions 1, 3, 4, and 6
中的元素。编写程序printLots(L,P)
。您只能使用公共STL
容器操作。你的手术的运行时间是多少?
这是我到目前为止所拥有的。一切都在编译,但是在运行它并使用选项3之后,什么都没有打印出来,我不确定我做错了什么。
起初我尝试使用多个选项来添加元素等等,但如果有人可以请帮助我解决问题的基本方面或帮我修复我的问题,那就是非常感谢。
#include <iostream>
#include <stdlib.h>
#include <cstdio>
#define NULL 0
using namespace std;
struct node
{
int elements;
struct node *link;
};
typedef struct node NODE;
NODE* create(NODE* h, int P);
int count(NODE* h);
NODE* sort(NODE* h);
void printLots(NODE* L, NODE* P);
NODE* create(NODE* h, int P)
{
if (h == NULL)
{
h = (NODE*)malloc(sizeof(NODE));
h->elements = P;
h->link = NULL;
}
else
{
h->link = create(h->link, P);
}
return (h);
printf("h");
}
int count(NODE* h)
{
int count = 0;
if (h != NULL)
{
count++;
h = h->link;
}
return count;
}
NODE* sort(NODE* h)
{
int i, q, r, temp;
NODE* htemp = h;
i = count(h);
for (q = 0; q < i; q++)
{
for (r = 0; r < i - 1; r++)
{
if (h->elements > h->link->elements)
{
temp = h->elements;
h->elements = h->link->elements;
h->link->elements = temp;
}
h = h->link;
}
h = htemp;
}
return htemp;
}
void printLots(NODE* L, NODE* P)
{
int countL, countP, i, j;
NODE* temp = L;
P = sort(P);
L = sort(L);
countL = count(L);
countP = count(P);
for (i = 0; i < countP; i++)
{
if (P->elements > countL)
{
printf("The L list does not contain %d elements\n", P->elements);
}
else
{
for (j = 0; j < P->elements - 1; j++)
{
L = L->link;
printf("%d\n", L->elements);
L = temp;
}
}
P = P->link;
}
}
int main()
{
int cs, value;
NODE *L, *P;
L = NULL;
P = NULL;
while (1)
{
printf("1.Add to list L\n");
printf("2.Add to list P\n");
printf("3.Print List\n");
printf("4.Clear Screen\n");
printf("5.Exit\n");
printf("Enter your choice: ");
scanf_s("%d", &cs);
switch (cs)
{
case 1: scanf_s("%d", &value);
L = create(L, value);
break;
case 2: scanf_s("%d", &value);
P = create(P, value);
break;
case 3: printLots(L, P);
break;
case 4: system("cls");
break;
case 5: exit(1);
break;
}
}
}