使用C ++中另一个列表中的位置打印列表中的元素

时间:2016-03-14 01:41:19

标签: c++ list pointers stl

您将获得一个列表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;
        }
    }
}

0 个答案:

没有答案