| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:大手们帮我看看链表
只看楼主 加入收藏
不虞
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-4-17
收藏
 问题点数:0 回复次数:3 
大手们帮我看看链表
在进行删除操作后程序会出错,并且输出是倒序的?...
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int  grade;
struct LNode *next;
}LNode, *Linklist;

Linklist Createhead(LNode *head){
head=(Linklist)malloc(sizeof(LNode));
head->next=NULL;
return head;
}

Linklist CreateList_L(int n,LNode *head){
 LNode *p;
int gra;
int i;
for(i=n;i>0;i--){
    p=(Linklist)malloc(sizeof(LNode));
    printf("请依次输成绩");
    scanf("%d,%d",&gra);
    p->grade=gra;
    p->next=head->next;
    head->next=p;

}
return head;
}
Linklist ListInsert_L(int a,Linklist head,int m){
LNode *p;
Linklist s;
int j;
p=head;
j=0;
while(p&&j<a-1)
    {
        p=p->next;
        ++j;
    }

s=(Linklist)malloc(sizeof(Linklist));
s->grade=m;
s->next=p->next;
p->next=s;
return head;
}

Linklist ListDelete_L(int b, Linklist head){
LNode *p,*q;
int j;
p=head;
j=0;
while(p->next&&j<b-1){
    p=p->next;
    ++j;
}

q=p->next;
p->next=q->next;

free(q);
return head;
}

Linklist ListTraverse(Linklist head,int n){
int h;
Linklist p;
p=head;
for(h=0;h<n;h++)
{
    p=p->next;
printf("第%d个数据值为%d\n",h+1,p->grade);
}
p=p->next;
if(p==NULL)
printf("输出完毕\n");
return head;
}

void main(){
int n,Y,a,X,b,m;

LNode *head;
head=Createhead(head);
printf("请输入学生总数");
scanf("%d",&n);
head=CreateList_L(n,&*head);
    printf("你是否需要插入数据 1.是 2.不是");
    scanf("%d",&Y);
   if(Y==1){
    printf("你需要在第几个前插入数据");
    scanf("%d",&a);
    printf("请输入要插入的数据");
    scanf("%d",&m);
    head=ListInsert_L(a,&*head,m);
    n++;
   }
   printf("你是否需要删除数据1.是2.不是");
   scanf("%d",&X);
   if(X==1){
    printf("你需要删除第几个数据");
    scanf("%d",&b);
head=ListDelete_L(b,&*head);
}
   ListTraverse(&*head,n);
   system("pause");
}
搜索更多相关主题的帖子: include return 
2017-04-17 19:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用不虞在2017-4-17 19:12:00的发言:
并且输出是倒序的?...

你的插入函数Linklist CreateList_L(int n,LNode *head) 貌似就是所说的头插入  那么你第一个输入的数据自然就被挤到末尾了

DO IT YOURSELF !
2017-04-17 20:32
zsh981022984
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
威 望:6
帖 子:36
专家分:153
注 册:2015-12-6
收藏
得分:0 
回复 楼主 不虞
程序代码:
Linklist CreateList_L(int n,LNode *head){
LNode *p,*q;                                 //增加一个q指针,指向最后一个节点
int gra;
int i;
q=(Linklist)malloc(sizeof(LNode));
q=head;
for(i=n;i>0;i--){
    p=(Linklist)malloc(sizeof(LNode));
    printf("请依次输成绩");
    scanf("%d,%d",&gra);
    p->grade=gra;
    q->next=p;
    q=q->next;

}

楼主使用的是插表头,所以输出是输入的倒序,这是插表尾

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2017-04-18 12:48
不虞
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-4-17
收藏
得分:0 
回复 2楼 wp231957
谢谢我去画图理解一下.
2017-04-19 16:16
快速回复:大手们帮我看看链表
数据加载中...
 
   



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

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