| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 600 人关注过本帖
标题:求解,对链表进行指定位置上的删除,当i=1时出错
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
收藏
 问题点数:0 回复次数:3 
求解,对链表进行指定位置上的删除,当i=1时出错
求解,对链表进行指定位置上的删除,当i=1时出错
#include<stdio.h>
#include<stdlib.h>
typedef struct stu
{
int i;
struct stu *next;
}stu; /*数据结构体*/

typedef struct head
{
stu *he;
int size;
}head;/*链表头文件信息存放*/


void dayin(stu *p3) /*打印出链表内容*/
{
while(p3!=NULL)
{
printf("%d\n",(*p3).i);
p3=(*p3).next;
}
}

head *creatlist() /*建立一个链表的起始位置*/
{
    head *p;
p=(head*)malloc(sizeof(head));
if(p==NULL)
{
printf("shengqingshibai\n");
return (NULL);
}
(*p).he=NULL;
(*p).size=0;
return p;
}
stu *creatnum() /*建立一个链表的成员*/
{
    stu *p1;
    p1=(stu*)malloc(sizeof(stu));
if(p1==NULL)
{
printf("shengqingshibai\n");
return (NULL);
}
(*p1).next=NULL;
return p1;
}

stu *lianjieshuju(head *p,stu *p1,stu *p2) /*将新建立数据连接到表尾巴*/
{
if((*p).size==0)
{
(*p).he=p1;
p2=p1;
}
else
{
(*p2).next=p1;
p2=p1;
}
return p2;
}

head *deletenum(head *p,int i)  /*删除指定位置的元素*/
{
stu *p1;
stu *p2;
int j;
p2=p1=(*p).he;
if(i==1)
{
    (*p).he=(*p2).next;
    (*p).size--;
    free(p1);
}
else if(i>(*p).size)
printf("要删除的数据超出了链表的长度");
else if(i<=0)
printf("输入错误");
else
{
for(j=1;j<i;j++)
p1=(*p1).next;
for(j=1;j<i-1;j++)
p2=(*p2).next;
(*p2).next=(*p1).next;
(*p).size--;
free(p1);
}
return p;
}
main()  /*主体*/
{
head *p;
stu *p1;
stu *p2;
stu *p3;
int n;
int i;
p=creatlist();  
printf("please shurushuju:\n");
scanf("%d",&n);
while(n!=0)            /*约定n=0时结束输入数据*/
{
p1=creatnum();
p2=lianjieshuju(p,p1,p2);
(*p1).i=n;
(*p).size++;
printf("qingshurushuju:\n");
scanf("%d",&n);
}
printf("shurushujujiesu\n");
printf("%d\n",(*p).size); /*显示链表长度*/
p3=(*p).he;
dayin(p3);
printf("请输入要删除的元素在链表的位置:");
scanf("%d",&i);
deletenum(p,i);
dayin(p3);
}
搜索更多相关主题的帖子: head 位置 include return 结构体 
2012-07-30 16:52
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
坐等

我要成为嘿嘿的黑客,替天行道
2012-07-30 16:53
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
给你提个建议先,以后写代码。麻烦你写工整一点,不要全部靠墙。。。。该缩进的要缩进,去搜几篇代码美化的文章看看
程序代码:
stu *lianjieshuju(head *p,stu *p1,stu *p2) /*将新建立数据连接到表尾巴*/
{
    if((*p).size==0)
      {
        (*p).he=p1;
        p2=p1;
      }
    else
      {
        (*p2).next=p1;
        p2=p1;
      }
    return p2;
}
这是你的代码,,我整理后的。。。。
2012-08-15 11:29
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
其实链表第一个数据的删除只要注意下头指针的链接就行了。。你的头指针?over。
2012-08-15 11:36
快速回复:求解,对链表进行指定位置上的删除,当i=1时出错
数据加载中...
 
   



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

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