| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2028 人关注过本帖
标题:单链表的创建删除输出操作
只看楼主 加入收藏
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
结帖率:58.33%
收藏
已结贴  问题点数:50 回复次数:6 
单链表的创建删除输出操作
【问题描述】输入一整数序列,采用单链表进行存储,按照非递减的方式输出该序列的所有值,每输出一个值,删除其对应的结点,同时输出链表的长度。
【输入形式】整数序列,以空格作为分隔,序列最多包含10个整数
【输出形式】整数序列,以空格作为分隔,

【样例输入】

10 90 80 20 40
【样例输出】

10 4 20 3 40 2 80 1 90 0
【样例说明】
【评分标准】
搜索更多相关主题的帖子: 整数 输出 序列 单链表 删除 
2020-05-08 23:11
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
收藏
得分:0 
这个彻底没思路,难搞
2020-05-08 23:14
chxchxkkk
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:12
专家分:102
注 册:2020-2-9
收藏
得分:50 
看输出样例大概是这样的流程:
1.创建单链表,并统计链表长度
2.排序
3.输出最小的值,同时长度减1并输出,释放这个结点,依次类推
2020-05-09 00:06
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
收藏
得分:0 
回复 3楼 chxchxkkk
好的,我实现一下
2020-05-09 09:39
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
收藏
得分:0 
C语言链表排序怎么实现
我转化为二维数组 ,时间过长
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(linklist)
struct student
{
    int num;
    struct student* next;
};
typedef struct student linklist;
int n;
linklist* creat()
{
    int count = 0;
    linklist* head, * end, * node;
    head = (linklist*)malloc(LEN);
    end = head;
    while (1)
    {
        node = (linklist*)malloc(LEN);
        scanf("%d", &node->num);
        end->next = node;
        end = node;
        count++;
        if (getchar() == '\n')
        {
            break;
        }

    }
    n = count;
    end->next = NULL;
    return head;
}
void print(linklist* head)
{
    if (head == NULL)
    {
        return;
    }
    linklist* p;
    p= (linklist*)malloc(LEN);
    p = head;
    int a[100] = { 0 }, i = 0;
    while (p->next != NULL)
    {
        p = p->next;
        a[i] = p->num;
        i++;
    }
    int j;
    int t;
    int u = n;
    int k;
    for (i = 0; i < n-1; i++)//控制循环的次数

    {
        k = i;
        for (j = i + 1; j < n; j++)
        {
            if (a[k] > a[j])
            {
                k = j;
            }
        }
        if (i != k)
        {
            t = a[i];
            a[i] = a[k];
            a[k] = t;
        }
    }
    for (i = 0; i < u; i++,n--)
    {
        if (n < 0)
        {
            break;
        }
        printf("%d %d ",a[i],n-1);
    }
}
int main()
{
    linklist* pt;
    pt = creat();
    print(pt);
    return 0;
}

2020-05-09 11:36
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
收藏
得分:0 
现在是链表排序这个问题

大佬们看看
2020-05-09 11:42
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
收藏
得分:0 
正确实现


程序代码:
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int a;
    struct node* next;
};
struct node* creat(int* i)
{
    int a = 0;
    int r;
    struct node* head, * p1, * p2;
    head = NULL;
    p1 = p2 = (struct node*)malloc(sizeof(struct node));
    while (1)
    {
        r = scanf("%4d", &p1->a);
        if (r == EOF)
        {
            break;
        }
        a++;
        if (head == NULL)
        {
            head = p1;
        }
        p2->next = p1;
        p2 = p1;
        p1 = (struct node*)malloc(sizeof(struct node));

    }
    *i = a;
    p2->next = NULL;
    return(head);
}
struct node* paixu(struct node* head, int i)
{
    int j, k, t;
    struct node* p1, * p2;
    for (j = 0; j < i - 1; j++)
    {
        p1 = head;
        p2 = head->next;
        for (k = 0; k < i - 1 - j; k++)
        {
            if (p1->a > p2->a)
            {
                t = p1->a;
                p1->a = p2->a;
                p2->a = t;
            }
            p1 = p2;
            p2 = p2->next;
        }
    }
    return(head);
}
struct node* Delete(struct node* head)
{
    struct node* p1;
    p1 = head;
    head = p1->next;
    free(p1);
    return(head);
}
int main()
{
    int i;
    struct node* head, * p;
    head = creat(&i);
    head = paixu(head, i);
    for (;;)
    {
        i--;
        p = head;
        printf("%d %d ", p->a, i);
        head = Delete(head);
        if (i == 0)
        {
            break;
        }

    }
    printf("\n");
    return 0;
}


2020-05-09 14:02
快速回复:单链表的创建删除输出操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026300 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved