c++的相关问题,用c++

img


c++的相关问题,用c++的方法解决,不要用太复杂的,简单点的即可

运行结果:

img

代码:

#include <iostream>
using namespace std;

typedef struct _linknode
{
    int data;
    struct _linknode* next;
}LinkNode;

int main()
{
    int i, data, n;
    LinkNode* head, * p, * t, * front;
    head = new LinkNode;
    head->next = 0;
    p = head;

    //输入n
    cin >> n;
    //输入n个数据
    for (i = 0; i < n; i++)
    {
        t = new LinkNode;
        cin >> t->data;
        t->next = 0;
        p->next = t;
        p = t;
    }
    //输入插入的数据
    cin >> data;
    t = new LinkNode;
    t->data = data;
    t->next = 0;
    //如果比最后一个元素大,直接插入最后一个位置
    if (t->data > p->data)
    {
        p->next = t;
    }
    else
    {
        front = head;
        p = front->next;
        while (p)
        {
            if (p->data > t->data)
            {
                front->next = t;
                t->next = p;
                break;
            }
            else
            {
                front = p;
                p = p->next;
            }
        }
    }

    //输出
    p = head->next;
    int flag = 0;
    while (p)
    {
        if (flag == 0)
        {
            cout << p->data;
            flag = 1;
        }
        else
            cout << " " << p->data;
        p = p->next;
    }
    
    return 0;

}

#include <iostream>
using namespace std;
typedef struct _linknode
{
    int data;
    struct _linknode *next;
}linknode,*linklist;

void createNode(linklist &head)
{
    head = new linknode();
    linklist p = head;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        linklist q = new linknode();
        cin>>q->data;
        q->next = NULL;
        p->next = q;
        p = q;
    }
}

void insertNode(linklist head,int x)
{
    linklist p = head;
    linklist q = new linknode();
    q->data = x;
    q->next = NULL;
    while(p->next != NULL)
    {
        if(p->next->data >= x)
        {
            q->next = p->next;
            p->next = q;
            break;
        }
        p = p->next;
    }
    if(p->next == NULL)
        p->next = q;
}

void print(linklist head)
{
    linklist p = head->next;
    while(p != NULL)
    {
        cout<<p->data<<" ";
        p = p->next;
    }
}

int main()
{
    linklist head = NULL;
    createNode(head);
    int x;
    cin>>x;
    insertNode(head,x);
    print(head);
    return 0;
}

顺序表:

#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
const int  LIST_INIT_SIZE = 100;
const int  LISTINCREASEMEMT = 10;
 
//定义元素类型 
typedef int ElemType;
//定义顺序表节点结构
typedef struct{
    ElemType *elem;
    int length;
    int listsize;
}SqList;
 
//构造空的顺序表
bool InitList_Sq(SqList &L){
    L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if(!L.elem){
        return false;
    }
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return true;
}
 
//按大小将元素插入到适当位置(顺序表递增有序)
bool ListInsert_Sq(SqList &L, ElemType e){
    ElemType *newbase; 
    //若当前存储已满,增加分配 
    if(L.length >= L.listsize){
        newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREASEMEMT) * sizeof(ElemType));
        if(!newbase){
            return false;
        }//存储分配失败
        L.elem = newbase;
        L.listsize += LISTINCREASEMEMT;
    }
    //寻找合适位置并插入 
    int i;
    for(i=0; i<L.length; i++){
        if(L.elem[i] > e){
            break;
        }   
    }
    ElemType *q = &(L.elem[i]);
    ElemType *p=&(L.elem[L.length-1]);
    for(q; p>=q; p--){
        *(p+1) = *p;
    }
    *q = e;
    ++L.length;
    return true;
}
 
//输出顺序表 
bool Print(SqList &L){
    for(int i=0; i<L.length; i++){
        printf("%d ",L.elem[i]);
    }
    printf("\n"); 
}
 
int main(int argc, char** argv) {
    int len; 
    SqList A;
    InitList_Sq(A);
    
    cout << "请输入顺序表的长度:";
    cin >> len;
    cout << endl << "请按递增顺序输入" << len << "个元素:";
    for(int i=0; i<len; i++){
        scanf("%d",&A.elem[i]);
    } 
    A.length = len;
    
    cout << endl << "请输入需要插入的元素:";
    ElemType x; 
    scanf("%d", &x);
    
    ListInsert_Sq(A, x);
    
    cout << endl << "插入后表中元素依次为:";
    Print(A);
    
    return 0;
}

单链表:

#include <iostream>
#include <cstdio>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREASEMEMT 10
using namespace std;
typedef int ElemType;  //定义数据元素类型为整型
 
//单链表节点结构
typedef struct Node
{
    ElemType data;     //数据域 
    struct Node *next; //指针域 
}Node,*LinkList;
LinkList p, q, flag;
 
//创建链表 
void CreateList(LinkList &A, int n) 
{
    A=(LinkList)malloc(sizeof(Node));
    p = A;
    for(int i=0; i<n; ++i) 
    {
        q = (LinkList)malloc(sizeof(Node));
        scanf("%d",&(q->data));
        p->next = q;
        q->next = NULL;
        p = q;
    }
}
 
 
//按元素大小插入元素到适当位置(顺序表递增有序)
void Insert(LinkList &L, int n, ElemType &x){
    p = L->next;
    q = (LinkList)malloc(sizeof(Node));
    flag = (LinkList)malloc(sizeof(Node));
    q->data = x;
    
    for(int i=1; i<=n; i++){
        if(p->data < x && i!=n){
            flag = p;
            p = p->next;
            
        } 
        else if(i == n){
            flag->next = q;
            q->next = NULL;
        }
        else{
            q->next = flag->next;
            flag->next = q;
            break;
        }
     }
}
 
//输出表中元素
void PrintfList(LinkList &L, int n){
     p = L->next;
     printf("%d", p->data);
     for(int i=2; i<=n; ++i)
     {
        p = p->next;
        printf(" %d", p->data);
     }
     printf("\n");
}
 
int main(int argc, char** argv) {
    LinkList A;
    ElemType x;
    int len;
    cout << "请输入顺序表的长度:";
    cin >> len;
    cout << endl << "请按递增顺序输入" << len << "个元素:";
    CreateList(A, len);
    cout << endl << "请输入需要插入的元素:";
    scanf("%d", &x);
    
    Insert(A, len, x);
    
    cout << endl << "插入后表中元素依次为:";
    PrintfList(A, len+1);
    
    return 0;
}

这题很简单,C++提供了list、map等容器,里面有排序的功能;只要把数字插入进去就可以了!谢谢,望采纳!

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    list<int> l;
    for (int i = 0; i < n; i++)
    {
        int a;
        cin >> a;
        l.push_back(a);
    }
    int x;
    cin >> x;
    auto it = find_if(l.begin(), l.end(), [x](const auto &a) { return a > x; });
    l.insert(it, x);
    for (auto a : l)
        cout << a << ' ';
    return 0;
}