| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1515 人关注过本帖
标题:双向循环链表程序运行弹出了name.exe已停止工作对话框,然后下面有调试停止 ...
只看楼主 加入收藏
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
双向循环链表程序运行弹出了name.exe已停止工作对话框,然后下面有调试停止这些选项
程序如下:
才刚写了一个创建的函数,用P指针开拓节点,q记录最后开拓的节点,head是头结点


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
static int n=0;
struct node
{
    int num;
    int score;
    struct node *next;
    struct node *prior;
};
struct node *creat()
{    struct node *head;
    struct node *p,*q;
    head=NULL;
    p=q=(struct node *)malloc(sizeof(struct node));
    printf("第%d个学生信息:\n",++n);
    printf("学号:");
    scanf("%d",&p->num);
    while(p->num != 0)
    {
        
        printf("成绩:");
        scanf("%d",&p->score);
        
        if(head=NULL)
            head=p;
        if(head!=NULL)
        {
            q->next=p;
            p->prior=q;
            q=p;
        }
        p=(struct node*)malloc(sizeof(struct node));
        printf("第%d个学生信息:\n",++n);
        printf("学号:");
        scanf("%d",&p->num);
    }
    n--;
    q->next=head;
    head->prior=q;
    free(p);

    printf("创建成功\n");
    return(head);


}
void main()
{
creat();
}
搜索更多相关主题的帖子: head include 链表程序 对话框 
2013-04-12 16:52
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
大神帮忙看看呗,编译链接都是没错的
2013-04-12 16:52
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
再补充一下就是输入的节点num为0表示创建结束,而我的这个程序也是在输入num为0的时候弹出程序停止运行的
2013-04-12 16:56
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:20 
我谈谈我的看法,因为我也是刚学习数据结构:
1、if(head=NULL)你这个应该是比较,不是赋值吧!应该是if(head==NULL);
2、q->next=head;我觉得你应该先开辟大小,然后才能进行赋值处理。
3、 p=(struct node*)malloc(sizeof(struct node));你的创建后,最好检验一下是否开辟内存空间成功。assert(p!=NULL);
我给你修改的如下:
#include<stdio.h>
 #include<stdlib.h>
 #include<malloc.h>
 static int n=0;
 struct node
 {
     int num;
     int score;
     struct node *next;
     struct node *prior;
 };
 struct node *creat()
 {    struct node *head;
     struct node *p,*q;
     head=NULL;
     p=q=(struct node *)malloc(sizeof(struct node));       //先开辟空间
    if(p==NULL)printf("内存开辟失败");
     printf("第%d个学生信息:\n",++n);
     printf("学号:");
     scanf("%d",&p->num);
     while(p->num != 0)
     {
         p=(struct node*)malloc(sizeof(struct node));
         printf("成绩:");
         scanf("%d",&p->score);
         
         if(head==NULL)
             head=p;
         if(head!=NULL)
         {
             q->next=p;
             p->prior=q;
             q=p;
         }
         printf("第%d个学生信息:\n",++n);
         printf("学号:");
         scanf("%d",&p->num);
     }
     n--;
     q=(struct node*)malloc(sizeof(struct node));       //开辟空间
if(q==NULL)printf("内存开辟失败");
     q->next=head;
     head->prior=q;
     free(p);
 
    printf("创建成功\n");
     return(head);
 

}
 void main()
 {
 creat();
 }

[ 本帖最后由 邓士林 于 2013-4-12 17:14 编辑 ]
收到的鲜花
  • 书生等待2013-04-12 17:17 送鲜花  3朵   附言:好文章

Maybe
2013-04-12 17:09
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 4楼 邓士林
回答的太好了,我也是刚发现判断写成赋值了,囧!
至于第二第三个问题,我还得思考一下,呵呵
2013-04-12 17:15
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 4楼 邓士林
第二个问题不是的,前面已经定义过q了,并且用q记录了最近一个成功开辟的节点
第三个我在网上也看到别人程序有写这句判断的,刚懒得写了,,,以后要养成好习惯
2013-04-12 17:20
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
回复 6楼 书生等待
问题要好好思考,这样才能进步。加油。我也是菜鸟

Maybe
2013-04-12 17:24
快速回复:双向循环链表程序运行弹出了name.exe已停止工作对话框,然后下面有调试 ...
数据加载中...
 
   



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

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