单链表插入的算法 编译没错 可就是不能运行 求大神们 帮帮忙
# 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>a*/)
{
t=p->data;
p->data=q->data;
q->data=t;/*t=a;
a=a;
a=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;
}
}
/*------------------------------------------------------------------------*/
本帖最后由 熊文杰 于 2013-5-18 14:32 编辑
运行了一下,首先,你的插入里面
printf("请输入要在第a个节点后插入一个节点 a = ");
scanf("%d",a);
这里应该是scanf("%d",&a);
printf("请输入新节点的数据 val =");
scanf ("%d",val);
这里也是应该是scanf("%d",&val);
我继续帮你看,看完了 把改过之后的完整代码贴出来
小改了你两个函数,一个创建函数,加了一句,phead-》pNext = NULL;否则你输入0时候就会崩溃。
另外插入也改了下代码如下PNODE creat_list(void)
{
int i ;
int len ;
int val ;//临时存储的数据
PNODE phead = (PNODE)malloc(sizeof(NODE));
if ( NULL == phead )
{
printf(" 创建失败 \n");
exit(-1);
}
//这里记得给初始值,否则创建0个结点的时候,你输出就会崩溃
phead->pNext = NULL;
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 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);
//赋值
pNew->data = val;
pNew->pNext = NULL;
if(NULL!=p)
{
pNew->pNext=p->pNext;
p->pNext=pNew;
}
else if (NULL == p)
{
pNew->pNext=NULL;
p->pNext=pNew;
}
}
/*------------------------------------------------------------------------*/ 另外,楼主的插入 没有判断输入的结点号大于结点个数,也不知道 楼主是不是刻意不这么做的。 遇到问题楼主可以单步调试嘛 小白白一只求罩罩 熊文杰 发表于 2013-5-18 14:27 static/image/common/back.gif
运行了一下,首先,你的插入里面
printf("请输入要在第a个节点后插入一个节点 a = ");
s ...
感谢感谢,居然败在了这小细节上去了,以后我会认真打代码的 熊文杰 发表于 2013-5-18 11:33 static/image/common/back.gif
运行了一下,首先,你的插入里面
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);
}
}
/*------------------------------------------------------------------------*/ 运行不了?你的删除函数 我这运行没什么问题。正常 熊文杰 发表于 2013-5-19 16:55 static/image/common/back.gif
运行不了?你的删除函数 我这运行没什么问题。正常
那可能是我的编译器有问题吧,我这写的应该没问题吧。谢咯 强烈支持楼主ing…… 我只是路过打酱油的。向你学习 强烈支持楼主ing…… 好好学习天天向上 谢谢楼主分享 帮你顶下吧我也不懂C的链表 路过!!!!!!!!! 我是来领鱼币的 不是有系统检测吗 :smile
页:
[1]