| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1027 人关注过本帖
标题:关于链表插入的操作 大家帮看看 是否存在什么bug一类的
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:3 
关于链表插入的操作 大家帮看看 是否存在什么bug一类的
程序代码:
// tlink.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <malloc.h>

typedef struct date
{
    unsigned int month;
    unsigned int day;
    unsigned int year;
    struct date* next;
}tdate,*pdate;

//链表插入函数
//为了方便操作 把head指针传入 实际上没有参与计算
//inspos 为中间插入时的索引 其他插入方式无效
//beginp 为插入数据块的首地址
//flag为插入标志 0 尾部插入 1 头部插入  2 中间插入
//endp就是所谓的后驱指针 我理解为临时变量
pdate linkins(pdate head,pdate beginp,pdate endp,unsigned int flag,unsigned inspos)
{
    pdate tmp=NULL;
    if(flag==0) 
    {
        beginp->next=NULL;
        endp->next=beginp;
        endp=beginp;
    }
    if(flag==1) 
    {
        endp=head;
        tmp=head->next;
        endp->next=beginp;
        endp=beginp;
        beginp->next=tmp;
    }
    if(flag==2) 
    {
        pdate tp;
        tp=head->next;
        int n=1;
        while(tp!=NULL)
        {
            tp=tp->next;
            n++;
            if(n==inspos)
            {
                endp=tp;
                tmp=tp->next;
                break;
            }
        }
        endp->next=beginp;
        endp=beginp;
        beginp->next=tmp;
    }
    return head;
}

int main(int argc, char* argv[])
{
    pdate  head;
    pdate  beginp;
    pdate  endp;
    pdate  tmp;
    //链表正常创建
    beginp=(pdate)malloc(sizeof(tdate));
    head=beginp;
    endp=beginp;
    int i;
    for(i=0;i<3;i++)
    {
        beginp=(pdate)malloc(sizeof(tdate));
        scanf("%u%u%u",&beginp->month,&beginp->day,&beginp->year);
        beginp->next=NULL;
        endp->next=beginp;
        endp=beginp;
    }
    printf("////////////正常输出示例//////////////////\n");
    beginp=head->next;
    while(beginp!=NULL)
    {
        printf("%6u%4u%4u\n",beginp->year,beginp->month,beginp->day);
        beginp=beginp->next;
    }
    //在链表尾部插入示例:
    beginp=(pdate)malloc(sizeof(tdate));
    scanf("%u%u%u",&beginp->month,&beginp->day,&beginp->year);
    head=linkins(head,beginp,endp,0,0);
    printf("////////////在尾部插入后输出示例//////////////////\n");
    beginp=head->next;
    while(beginp!=NULL)
    {
        printf("%6u%4u%4u\n",beginp->year,beginp->month,beginp->day);
        beginp=beginp->next;
    }
    //在链表头部插入示例:
    beginp=(pdate)malloc(sizeof(tdate));
    scanf("%u%u%u",&beginp->month,&beginp->day,&beginp->year);
    head=linkins(head,beginp,endp,1,0);
    printf("////////////在头部插入后输出示例//////////////////\n");
    beginp=head->next;
    while(beginp!=NULL)
    {
        printf("%6u%4u%4u\n",beginp->year,beginp->month,beginp->day);
        beginp=beginp->next;
    }
    //在链表中间插入示例:
    beginp=(pdate)malloc(sizeof(tdate));
    scanf("%u%u%u",&beginp->month,&beginp->day,&beginp->year);
    head=linkins(head,beginp,endp,2,2);
    printf("////////////在链表中间插入后输出示例//////////////////\n");
    beginp=head->next;
    while(beginp!=NULL)
    {
        printf("%6u%4u%4u\n",beginp->year,beginp->month,beginp->day);
        beginp=beginp->next;
    }
    ///////////////////////////////////////////////////
    free(head);
    return 0;
}

/*  示例效果
1 1 1
2 2 2
3 3 3
////////////正常输出示例//////////////////
     1   1   1
     2   2   2
     3   3   3
4 4 4
////////////在尾部插入后输出示例//////////////////
     1   1   1
     2   2   2
     3   3   3
     4   4   4
0 0 0
////////////在头部插入后输出示例//////////////////
     0   0   0
     1   1   1
     2   2   2
     3   3   3
     4   4   4
9 9 9
////////////在链表中间插入后输出示例//////////////
     0   0   0
     1   1   1
     9   9   9
     2   2   2
     3   3   3
     4   4   4
*/
搜索更多相关主题的帖子: 控制台 应用程序 
2017-03-17 08:50
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2楼 Alien_Lee
我现在对这些指针还是很迷糊呢
一楼的代码是我硬调试出来的,首尾插入还好一些  中间插入时 链条一度中断  好不容易才连上

下面准备研究一下 逆序和排序  看看能不能对这些指针再深一步了解

DO IT YOURSELF !
2017-03-17 13:03
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
画啥流程图啊。我这些指针头疼
下午,看那个链表逆序  代码就几行。硬是看不懂

DO IT YOURSELF !
2017-03-17 22:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用寒风中的细雨在2017-3-17 23:06:24的发言:

  老师  同学  讨论下 尝试

我不做学生好多年。找誰去

DO IT YOURSELF !
2017-03-18 00:03
快速回复:关于链表插入的操作 大家帮看看 是否存在什么bug一类的
数据加载中...
 
   



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

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