回 帖 发 新 帖 刷新版面

主题:[讨论]出现问题啦,急求答案!!!!

#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");
}










上面这段代码老是在编译的时候报错,但是又找不到问题到底处在什么地方,希望知道的大侠可以指教一下,希望给出改过后的程序,并注明问题到底是处在什么地方啦










回复列表 (共1个回复)

沙发

提问题 你也得想想,这么问谁去帮你一行行看。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册