Homework02解析

稍微写下解答,不保证对

[2-1] 编写一个实现在顺序表中删除给定元素操作的函数:
bool deletion(sqList &L, element e);
这篇博客以及很好了
https://blog.csdn.net/qq_37618760/article/details/104207248

[2-2] 编写一个实现在单链表中的元素a之前插入元素b操作的函数:
bool insertion(linknode *hp, element a, element b);

看我上篇博客https://blog.csdn.net/Jerome_Chen_Y/article/details/109208826

[2-3] 若要求在时间复杂度为O(1)的前提下实现线性表访问当前元素的前趋和后继,线性表可以采用哪些存储结构?
顺序表,双向链表都可

[2-4] 比较线性表的顺序存储结构和链式存储结构。
嗯哼

[2-5]* 运用单向循环链表求解约瑟夫环问题,试编程实现输出出列序列。
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐一圈。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到所有人全部出列。

题目,可以自己做做提交看
https://www.luogu.com.cn/problem/P1996

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

typedef struct Node
{
    
    
    int data;
    struct Node* next;
}LinkedList;

LinkedList *Initiate()
{
    
    
    LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
    list->data = 0;
    list->next = NULL;
    return list;
}

//要建环
void Create(LinkedList *list, int n)
{
    
    
    LinkedList* scan = list;

    for(int i = 1; i <= n; i++)
    {
    
    
        LinkedList* pnew = (LinkedList*)malloc(sizeof(LinkedList));
        pnew->data = i;
        pnew->next = scan->next;
        scan->next = pnew;
        if(i != n)
            scan = scan->next;
    }
    scan = scan->next;
    //头尾相接,单向循环链表
    scan->next = list->next;
}

void Printoutline(LinkedList *list, int m)
{
    
    
    LinkedList* scan = list->next;

    while(scan->next != scan)       //没全出列就继续循环
    {
    
    
        LinkedList* temp;
        for(int i = 1; i < m - 1; i++)      //找到出列的前一个人
            scan = scan->next;
        temp = scan->next;
        cout << temp->data << ' ';
        scan->next = scan->next->next;
        free(temp);
        scan = scan->next;      //从下一个人开始
    }
    cout << scan->data;
}


int main()
{
    
    
    int n = 0, m = 0;

    cin >> n >> m;

    LinkedList* list = Initiate();
    Create(list, n);

    //把自己出列不好处理,就单独拉出讨论了
    if(m == 1)
        for(int i = 1; i <= n; i++)
            cout << i << ' ';
    else
        Printoutline(list, m);


    system("pause");

    return 0;
}

不一定是最好的解,但可以AC噢

猜你喜欢

转载自blog.csdn.net/Jerome_Chen_Y/article/details/109441317
今日推荐