主题:[讨论]出现问题啦,急求答案!!!!
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef int elemtype;
typedef struct node
{ elemtype data ;
stuct node * next;
}linklist;
linklist * head;
linklist * create_linklist();
void print_linklist(linklist * head);
int linklist_len(linklist * head);
linklist * getdata(linklist * head ,int i);
linklist * search(linklist * head ,elentype key );
void insert(linklist * head ,elemtype x ,elentype i);
int delete(linklist * head , int i);
int delet(linklist * p);
linklist * setnull(linklist * head )
void menu();
void main()
{
char cmd;
int i,len,isdo;
elemtype x,key;
linklist * l=NULL;
system("cls");
menu();
while((cmd=getchar())!='#')
{ switch(cmd)
{ case '1': l = linklist * create_linklist();
printf("\n创建结束!\n");
system("pause");
break;
case '2': print_linklist(linklist * head);
printf("\n链表中数据输出完毕,请您核对……\n");
system("pause");
break;
case '3': len = linklist_len( l );
printf("\n链表的长度是: %d!\n",len);
system("pause");
break;
case '4': printf("\n请输入要查找的数据:\n");
scanf("%d",&key);
i=search(l , key);
if (i==0)
printf("\n您要查找的数值不存在。\n");
else
printf("\n您要查找的 %d 在 %d 位置上\n",key,i);
system("pause");
break;
case '5': printf("\n请输入要插入的数据,并输入要插入的位置:\n");
scanf("%d ,%d",&x,&i);
isdo=insert(l ,x,i);
if (isdo==1) printf("\n成功插入数据到链表!\n");
system("pause");
break;
case '6': printf("\n请输入要删除的位置:\n");
scanf("%d",&i);
isdo=delete(l , i);
if (isdo==1) printf("\n成功删除数据!\n");
system("pause");
break;
case '7': printf("\n此项将把链表置空,如果您确定此操作请按‘1’,否则请按‘0’\n");
scanf("%d",&i);
if(i==1) {setnull(linklist l ;
system("pause");
break; }
else break;
}
fflush(stdin);
system("pause");
menu();
}
}
linklist * create_linklist()
{
elemtype ix;
linklist * head ,* p;
head = (linklist * )malloc(sizeof(linklist ));
head->next = NULL;
printf("请输入数据直到输入0时结束:\n");
scanf("%d",&ix);
while(ix!=0)
{ p=(linklist * )malloc(sizeof(linklist ));
p->data = ix;
p->next = head->next;
head->next = p;
scanf("%d",&ix);
}
return(head);
}
void print_linklist(linklist * head)
{
linklist * p = head ->next;
while(p!=NULL)
{ printf("\t %d",p->next);
p =p->next;
}
}
int linklist_len(linklist * head)
{
linklist * p = head;
int j=0;
while(p->next!=NULL)
{ p = p->next;
j++;
}
return j;
}
linklist * getdata(linklist * head ,int i)
{
linklist * p;
int j = 0;
if(i<=0) return NULL;
p = head;
while(p->next!=NULL&&j<i)
{ p = p->next;
j++;
}
if (i==j) return p;
else return NULL;
}
linklist * search(linklist * head ,elentype key)
{
linklist * p;
p = head ->next;
while(p!=NULL)
if(p->data!=key)
p = p->next;
else
break;
return p;
}
void insert(linklist * head ,elemtype x , elemtype i)
{
linklist * s ,* p;
s = (linklist * )malloc(sizeof(linklist));
s->data = x;
p=head ->next;
while(j!=i&&p!=NULL)
{ j++;
p=p->next;
}
if(j==i)
{ s->next = p->next;
p ->next = s ;
}
else break;
}
int delete(linklist * head , int i)
{
linklist * p, r;
if(i==0) p = NULL;
else if(i==1) p = head;
else p = getdata(head , i-1);
if(p==NULL)
{ printf("删除的位置不存在!\n");
return 0;
}
else
{
r = p->next;p->next = r->next;
free(r);
return 1;
}
}
int delet(linklist * p)
{
linklist * r;
if(!p)
{ printf("结点为空\n");
return 0;
}
p->next = r->next;
free(r);
return 1;
}
linklist * setnull(linklist * head )
{
while(head->next !=NULL)
delet(head);
return(head);
}
void menu()
{ system("cls");
printf("\t 1.创建链表并为链表输入数据\n");
printf("\t 2.核对链表中数据\n");
printf("\t 3.输出链表的长度\n");
printf("\t 4.查找数据\n");
printf("\t 5.向链表中插入数据\n");
printf("\t 6.删除指定位置上的结点\n");
printf("\t 7.将链表置空\n");
printf("\t 如想退出,请按“#”。\n");
printf(" 请输入您的选项:\n");
}
上面这段代码老是在编译的时候报错,但是又找不到问题到底处在什么地方,希望知道的大侠可以指教一下,希望给出改过后的程序,并注明问题到底是处在什么地方啦
#include<stdlib.h>
#define NULL 0
typedef int elemtype;
typedef struct node
{ elemtype data ;
stuct node * next;
}linklist;
linklist * head;
linklist * create_linklist();
void print_linklist(linklist * head);
int linklist_len(linklist * head);
linklist * getdata(linklist * head ,int i);
linklist * search(linklist * head ,elentype key );
void insert(linklist * head ,elemtype x ,elentype i);
int delete(linklist * head , int i);
int delet(linklist * p);
linklist * setnull(linklist * head )
void menu();
void main()
{
char cmd;
int i,len,isdo;
elemtype x,key;
linklist * l=NULL;
system("cls");
menu();
while((cmd=getchar())!='#')
{ switch(cmd)
{ case '1': l = linklist * create_linklist();
printf("\n创建结束!\n");
system("pause");
break;
case '2': print_linklist(linklist * head);
printf("\n链表中数据输出完毕,请您核对……\n");
system("pause");
break;
case '3': len = linklist_len( l );
printf("\n链表的长度是: %d!\n",len);
system("pause");
break;
case '4': printf("\n请输入要查找的数据:\n");
scanf("%d",&key);
i=search(l , key);
if (i==0)
printf("\n您要查找的数值不存在。\n");
else
printf("\n您要查找的 %d 在 %d 位置上\n",key,i);
system("pause");
break;
case '5': printf("\n请输入要插入的数据,并输入要插入的位置:\n");
scanf("%d ,%d",&x,&i);
isdo=insert(l ,x,i);
if (isdo==1) printf("\n成功插入数据到链表!\n");
system("pause");
break;
case '6': printf("\n请输入要删除的位置:\n");
scanf("%d",&i);
isdo=delete(l , i);
if (isdo==1) printf("\n成功删除数据!\n");
system("pause");
break;
case '7': printf("\n此项将把链表置空,如果您确定此操作请按‘1’,否则请按‘0’\n");
scanf("%d",&i);
if(i==1) {setnull(linklist l ;
system("pause");
break; }
else break;
}
fflush(stdin);
system("pause");
menu();
}
}
linklist * create_linklist()
{
elemtype ix;
linklist * head ,* p;
head = (linklist * )malloc(sizeof(linklist ));
head->next = NULL;
printf("请输入数据直到输入0时结束:\n");
scanf("%d",&ix);
while(ix!=0)
{ p=(linklist * )malloc(sizeof(linklist ));
p->data = ix;
p->next = head->next;
head->next = p;
scanf("%d",&ix);
}
return(head);
}
void print_linklist(linklist * head)
{
linklist * p = head ->next;
while(p!=NULL)
{ printf("\t %d",p->next);
p =p->next;
}
}
int linklist_len(linklist * head)
{
linklist * p = head;
int j=0;
while(p->next!=NULL)
{ p = p->next;
j++;
}
return j;
}
linklist * getdata(linklist * head ,int i)
{
linklist * p;
int j = 0;
if(i<=0) return NULL;
p = head;
while(p->next!=NULL&&j<i)
{ p = p->next;
j++;
}
if (i==j) return p;
else return NULL;
}
linklist * search(linklist * head ,elentype key)
{
linklist * p;
p = head ->next;
while(p!=NULL)
if(p->data!=key)
p = p->next;
else
break;
return p;
}
void insert(linklist * head ,elemtype x , elemtype i)
{
linklist * s ,* p;
s = (linklist * )malloc(sizeof(linklist));
s->data = x;
p=head ->next;
while(j!=i&&p!=NULL)
{ j++;
p=p->next;
}
if(j==i)
{ s->next = p->next;
p ->next = s ;
}
else break;
}
int delete(linklist * head , int i)
{
linklist * p, r;
if(i==0) p = NULL;
else if(i==1) p = head;
else p = getdata(head , i-1);
if(p==NULL)
{ printf("删除的位置不存在!\n");
return 0;
}
else
{
r = p->next;p->next = r->next;
free(r);
return 1;
}
}
int delet(linklist * p)
{
linklist * r;
if(!p)
{ printf("结点为空\n");
return 0;
}
p->next = r->next;
free(r);
return 1;
}
linklist * setnull(linklist * head )
{
while(head->next !=NULL)
delet(head);
return(head);
}
void menu()
{ system("cls");
printf("\t 1.创建链表并为链表输入数据\n");
printf("\t 2.核对链表中数据\n");
printf("\t 3.输出链表的长度\n");
printf("\t 4.查找数据\n");
printf("\t 5.向链表中插入数据\n");
printf("\t 6.删除指定位置上的结点\n");
printf("\t 7.将链表置空\n");
printf("\t 如想退出,请按“#”。\n");
printf(" 请输入您的选项:\n");
}
上面这段代码老是在编译的时候报错,但是又找不到问题到底处在什么地方,希望知道的大侠可以指教一下,希望给出改过后的程序,并注明问题到底是处在什么地方啦