鱼C论坛

 找回密码
 立即注册
查看: 4327|回复: 19

单链表插入的算法 编译没错 可就是不能运行 求大神们 帮帮忙

[复制链接]
发表于 2013-5-18 11:33:30 | 显示全部楼层 |阅读模式
1鱼币
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
/*-------------------------------创建结构类型----------------------------------*/
typedef struct Node
{
int data ;
struct Node * pNext ;
}NODE , * PNODE ;
/*-----------------------------------------------------------------------------*/

/*---------------------------------创建函数------------------------------------*/
PNODE creat_list(void) ;
void shuchu(PNODE phead);
int geshu (PNODE phead);
void paixu(PNODE phead);
void charu(PNODE phead);
/*-----------------------------------------------------------------------------*/
/*---------------------------------主函数---------------------------------*/
int main (void)
{
PNODE phead = NULL ;
int val ;
int len ;
phead =creat_list();
shuchu(phead);
len = geshu (phead);
printf ("有%d个节点\n",len);
paixu(phead);
shuchu(phead);
charu(phead);
shuchu(phead);
return 0;
}
/*------------------------------------------------------------------------*/

/*-----------------------------创建单链表函数------------------------------------*/
PNODE creat_list(void)
{
int i ;
int len ;
int val ;//临时存储的数据
PNODE phead = (PNODE)malloc(sizeof(NODE));
if ( NULL == phead )
{
  printf(" 创建失败 \n");
  exit(-1);
}
PNODE pTail = phead ;

printf("输入要生成节点的个数 len = \n");
scanf ("%d",&len);
for(i = 0 ; i < len ; i ++)
{

printf("请输入第%d个节点的值: ", i+1);
scanf("%d",&val);

PNODE New =(PNODE)malloc(sizeof(NODE));
if (NULL==New)
  exit(-1);

New ->data = val;
pTail ->pNext = New ;
New ->pNext =NULL;
pTail = New ;

}
return phead ;
}
/*------------------------------------------------------------------------*/
/*-------------------------------输出函数-----------------------------------*/
void shuchu(PNODE phead)
{
PNODE p = phead->pNext ;
while (p != 0)
{  
  printf("%d\n",p->data);
  p = p->pNext;
}
return;
}
/*------------------------------------------------------------------------*/

/*----------------------------------节点个数---------------------------------*/
int geshu (PNODE phead)
{
  PNODE p = phead->pNext ;
  int i = 0;
while (p != 0)
{  
  
  i= i+ 1;
  p = p->pNext;
}
return i ;
}
/*------------------------------------------------------------------------*/

/*---------------------------------排序---------------------------------*/
void paixu(PNODE phead)
{
int i = 0 ;
int j = 0 ;
int len = 0;
int t;
PNODE p ,q ;
len = geshu (phead) ;

for (i = 0 ,p=phead ->pNext;i < len - 1 ;i ++,p=p->pNext)
  for (j =i+1,q=p->pNext ; j< len ;j++,q=q->pNext)
  {
   if( p->data > q->data/*a[i]>a[j]*/)
   {
   
    t=p->data;
    p->data=q->data;
    q->data=t;/*t=a[i];
    a[i]=a[j];
    a[j]=t;*/
   }
  }
}
/*------------------------------------------------------------------------*/

/*------------------------------插入----------------------------------------*/
void charu(PNODE phead)
{
PNODE p = phead;



int a;


int len;
int val ;
len = geshu (phead) ;
printf("请输入要在第a个节点后插入一个节点 a = ");
scanf("%d",a);
for(a = 1 ; a <= len ; a++ )

  p = p->pNext;
  PNODE pNew =(PNODE)malloc(sizeof(NODE));
  printf("请输入新节点的数据 val =");
  scanf ("%d",val);
if(NULL!=p)
{
  pNew->pNext=p->pNext;
  p->pNext=pNew;
}
else if (NULL == p)
{
  pNew->pNext=NULL;
  p->pNext=pNew;
}



}
/*------------------------------------------------------------------------*/

最佳答案

查看完整内容

运行了一下,首先,你的插入里面 printf("请输入要在第a个节点后插入一个节点 a = "); scanf("%d",a); 这里应该是scanf("%d",&a); printf("请输入新节点的数据 val ="); scanf ("%d",val); 这里也是应该是scanf("%d",&val); 我继续帮你看,看完了 把改过之后的完整代码贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-18 11:33:31 | 显示全部楼层
本帖最后由 熊文杰 于 2013-5-18 14:32 编辑

运行了一下,首先,你的插入里面
        printf("请输入要在第a个节点后插入一个节点 a = ");
        scanf("%d",a);

这里应该是scanf("%d",&a);

        printf("请输入新节点的数据 val =");
        scanf ("%d",val);
这里也是应该是scanf("%d",&val);
我继续帮你看,看完了 把改过之后的完整代码贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-18 14:42:44 | 显示全部楼层
小改了你两个函数,一个创建函数,加了一句,phead-》pNext = NULL;否则你输入0时候就会崩溃。
另外插入也改了下代码如下
  1. PNODE creat_list(void)
  2. {
  3.         int i ;
  4.         int len ;
  5.         int val ;//临时存储的数据
  6.         PNODE phead = (PNODE)malloc(sizeof(NODE));
  7.         if ( NULL == phead )
  8.         {
  9.                 printf(" 创建失败 \n");
  10.                 exit(-1);
  11.         }
  12.         //这里记得给初始值,否则创建0个结点的时候,你输出就会崩溃
  13.         phead->pNext = NULL;
  14.         PNODE pTail = phead ;

  15.         printf("输入要生成节点的个数 len = \n");
  16.         scanf ("%d",&len);
  17.         for(i = 0 ; i < len ; i ++)
  18.         {

  19.                 printf("请输入第%d个节点的值: ", i+1);
  20.                 scanf("%d",&val);

  21.                 PNODE New =(PNODE)malloc(sizeof(NODE));
  22.                 if (NULL==New)
  23.                         exit(-1);

  24.                 New ->data = val;
  25.                 pTail ->pNext = New ;
  26.                 New ->pNext =NULL;
  27.                 pTail = New ;

  28.         }

  29.         return phead ;
  30. }
复制代码
  1. /*------------------------------------------------------------------------*/

  2. /*------------------------------插入----------------------------------------*/
  3. void charu(PNODE phead)
  4. {
  5.         PNODE p = phead;



  6.         int a;


  7.         int len;
  8.         int val ;
  9.         len = geshu (phead) ;
  10.         printf("请输入要在第a个节点后插入一个节点 a = ");
  11.         scanf("%d",&a);
  12.         for(a = 1 ; a <= len ; a++ )

  13.                 p = p->pNext;
  14.         PNODE pNew =(PNODE)malloc(sizeof(NODE));
  15.         printf("请输入新节点的数据 val =");
  16.         scanf ("%d",&val);

  17.         //赋值
  18.         pNew->data = val;
  19.         pNew->pNext = NULL;
  20.        
  21.         if(NULL!=p)
  22.         {
  23.                 pNew->pNext=p->pNext;
  24.                 p->pNext=pNew;
  25.         }
  26.         else if (NULL == p)
  27.         {
  28.                 pNew->pNext=NULL;
  29.                 p->pNext=pNew;
  30.         }
  31.        

  32. }
  33. /*------------------------------------------------------------------------*/
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-18 14:45:11 | 显示全部楼层
另外,楼主的插入 没有判断输入的结点号大于结点个数,也不知道 楼主是不是刻意不这么做的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-18 22:17:19 | 显示全部楼层
遇到问题楼主可以单步调试嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 00:35:08 | 显示全部楼层
小白白一只求罩罩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-19 11:56:31 | 显示全部楼层

感谢感谢,居然败在了这小细节上去了,以后我会认真打代码的  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-19 16:08:07 | 显示全部楼层
熊文杰 发表于 2013-5-18 11:33
运行了一下,首先,你的插入里面
        printf("请输入要在第a个节点后插入一个节点 a = ");
        s ...

我又把删除的函数写出来了   ,也是编译成功  但是 运行不了;
/*--------------------------------------删除--------------------------------*/
void shanchu(PNODE phead)
{
        PNODE p = phead ;
       
        PNODE q = NULL ;
        int length ;
       
        int a=0;
        int i ;
        length = geshu (phead);

       
        printf("请输入要删除第a个节点 a = ");
        scanf ("%d", &a);
        for (i =0 ; i < a ; i ++)
        {       
                q = p ;
                p=p->pNext;
        }
        if ( NULL != p)
        {
                q->pNext=q->pNext->pNext;
                free(p);
        }
        else if (NULL == p)
        {
                q->pNext=NULL;
                free(p);
        }
}
/*------------------------------------------------------------------------*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 16:55:34 | 显示全部楼层
运行不了?你的删除函数 我这运行没什么问题。正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-19 18:10:34 | 显示全部楼层
熊文杰 发表于 2013-5-19 16:55
运行不了?你的删除函数 我这运行没什么问题。正常

那可能是我的编译器有问题吧,我这写的应该没问题吧。  谢咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 13:55:22 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-27 13:43:02 | 显示全部楼层
我只是路过打酱油的。向你学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-28 14:28:41 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-2 22:01:09 | 显示全部楼层
好好学习天天向上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-4 19:33:18 | 显示全部楼层
谢谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-4 20:23:49 | 显示全部楼层
帮你顶下吧  我也不懂C的链表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-15 19:53:40 | 显示全部楼层
路过!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-19 16:42:52 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-7 17:08:42 | 显示全部楼层
不是有系统检测吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-10 14:18:05 | 显示全部楼层
:smile
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表