请C语言高手帮下忙

链表,实现创建、插入和打印。有一个error,可自己找不到,请高手帮忙。#include<stdafx.h>#include<stdio.h>#include<stdli... 链表,实现创建、插入和打印。有一个error,可自己找不到,请高手帮忙。

#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct list
{
int num;
struct list *next;
}list; //new ADT

list *Head;
Head=(list *)malloc(sizeof(list));
Head->next=NULL;
int N; //to count the member of the list
N=0;

void initlist() //inite a list
{
int i;
list *a;
char judge;
a=Head;
for(i=1;;i++)
{
N++;
a->next=(list *)malloc(sizeof(list));
a=a->next;
printf("Please input NO.%d's data:\n",i);
scanf("%d",&a->num);
printf("continue?(Y/N)\n");
judge=getchar();
if(judge=='n'||judge=='N')
break;
}
a->next=NULL;
}

void insertlist(list *head,int i) //insert data
{
list *temp,*a;
int n;
a=head;
for(n=0;n<i;n++)
a=a->next;
temp=a->next;
a->next=(list *)malloc(sizeof(list));
a=a->next;
a->next=temp;
printf("insert data:\n");
scanf("%d",&a->num);
printf("\n");
N++;

}

void printlist() //print a list
{
list *a;
a=Head->next;
while(a->next!=NULL)
{
printf("%d",a->num);
a=a->next;
}
printf("%d\n",a->num);
}

void main(int argc, char* argv[])
{
printf("inite a list:\n");
initlist();
printf("Want to insert?(Y/N)\n");
char j;
j=getchar();
if(j=='y'||j=='Y')
{
printf("insert after which one?\n");
int n;
scanf("%d",&n);
if(n<=N)
insertlist(Head,n);
else
printf("ERROR\n");
}
printlist();

}
展开
 我来答
厚以旋l8
2010-09-22 · TA获得超过1386个赞
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:351万
展开全部
你以下几行是不行的
list *Head;
Head=(list *)malloc(sizeof(list));//error
Head->next=NULL; //error
int N;
N=0; //error
标了error 是错误的语句。它们都是赋值语句,但是没有放在函数里面调用而是放在全局区域中,这是无法执行的。
给你提供两个方法解决:一个是用一个函数专门负责头指针,N依旧全局变量
list* CreateHead(){
list *Head;
Head=(list *)malloc(sizeof(list));
Head->next=NULL;
return Head;}
static int N = 0;
……
void main(){list* head = CreateHead();……}
第二个方法是:
list *Head=(list *)malloc(sizeof(list));
static int N = 0;
……

希望帮到你。
liujiahi
2010-09-22 · TA获得超过1002个赞
知道小有建树答主
回答量:621
采纳率:66%
帮助的人:471万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct list
{
int num;
struct list *next;
}list; //new ADT

int N = 0; //to count the member of the list

void initlist(list* Head) //inite a list
{
int i;
list *a;
char judge;
a=Head;
for(i=1;;i++)
{
N++;
a->next=(list *)malloc(sizeof(list));
a=a->next;
printf("Please input NO.%d's data:\n",i);
scanf("%d",&a->num);
getchar();//处理回车
printf("continue?(Y/N)\n");
judge=getchar();
if(judge=='n'||judge=='N')
break;
}
a->next=NULL;
}

void insertlist(list *head,int i) //insert data
{
list *temp,*a;
int n;
a=head;
for(n=0;n<i;n++)
a=a->next;
temp=a->next;
a->next=(list *)malloc(sizeof(list));
a=a->next;
a->next=temp;
printf("insert data:\n");
scanf("%d",&a->num);
printf("\n");
N++;

}

void printlist(list* Head) //print a list
{
list *a;
a=Head->next;
printf("the numbers are : \n");
while(a->next!=NULL)
{
printf("%d ",a->num);
a=a->next;
}
printf("%d\n",a->num);
}

void main(int argc, char* argv[])
{

list *Head;
Head=(list *)malloc(sizeof(list));
Head->next=NULL;
printf("inite a list:\n");
initlist(Head);
getchar();//还是处理回车
printf("Want to insert?(Y/N)\n");
char j;
j=getchar();
if(j=='y'||j=='Y')
{
printf("insert after which one?\n");
int n;
scanf("%d",&n);
if(n<=N)
insertlist(Head,n);
else
printf("ERROR\n");
}
printlist(Head);

}
实现基本功能,程序不健壮
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式