注册 登录
编程论坛 数据结构与算法

运行时,提示可执行程序停止工作,求大神指点(链表)

千里孤坟 发布于 2014-11-04 22:06, 587 次点击
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define ElemType int
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;
LinkList L;
 int InitList_L()
   {
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)
        return 0;
    L->next=NULL;
    return 1;
    }

/*void CreateList_L(LinkList &L,int n)
{
    LinkList p;
    int i;
    L=(LinkList)malloc(sizeof(LNode));

    L->next=NULL;
    for(i=0;i<n;i--)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",p->data);
    }
    p->next=L->next;
    L->next=p;
}*/
int CreateList_L(LinkList &L,int n)
    {
         LinkList p,q;
         int i;
         L=(LinkList)malloc(sizeof(LNode));
         q=L;
         for(i=0;i<n;i++)
         {
             p=(LinkList)malloc(sizeof(LNode));
              scanf("%d",p->data);
              q->next=p;
              q=p;
              p->next=NULL;
          }
           return 1;
    }
 

int LinkInsert_L(LinkList &L,int i,ElemType e)
{
    LinkList s,p;
    int j;
    p=L;j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return 0;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return 1;
}

int ListDelete_L(LinkList &L,int i,ElemType &e)
{
    LinkList q,p;
    p=L;
    int j=0;
    while(p->next && j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return 0;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return 1;
}

void PrintList_L(LinkList &L)
{
 LinkList p;
 p=L->next;
 while(p)
  {
   printf("%d",p->data);
   p=p->next;
   printf("\n");
  }
}

void main()
{
    int number,k;
    //int i;
    LinkList L;
    printf("请依次输入5个整数:\n");
    CreateList_L(L,5);
    printf("请按提示,选择操作选项:\n");
    printf("1 插入元素\n");
    printf("2 删除元素\n");
    printf("3 退出\n");
    scanf("%d",&number);
    switch(number)
    {
    case 1 :printf("选项1\n");
         LinkInsert_L(L,3,9);
        PrintList_L(L);
        break;
    case 2 :printf("选项2\n");
        ListDelete_L(L,4,k);
        PrintList_L(L);
        break;
    case 3 :printf("选项3\n");
        break;
    default:printf("enter data error!\n");
    }
}
3 回复
#2
soulmate10232014-11-07 11:48
给你改了,你这个有个很无语的问题,你的创建链表函数中的&没有加!!!
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define ElemType int
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;
LinkList L;
int InitList_L(LinkList &L) //具有头结点

   {
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)
        return 0;
        L->data=-1;
    L->next=NULL;
    return 1;
    }

/*void CreateList_L(LinkList &L,int n)
{
    LinkList p;
    int i;
    L=(LinkList)malloc(sizeof(LNode));

    L->next=NULL;
    for(i=0;i<n;i--)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",p->data);
    }
    p->next=L->next;
    L->next=p;
}
*/
int CreateList_L(LinkList &L,int n)
    {
         LinkList p,q;
         int i;
  //       L=(LinkList)malloc(sizeof(LNode));
         q=L;
         for(i=0;i<n;i++)
         {
             p=(LinkList)malloc(sizeof(LNode));
              scanf("%d",&p->data);  

              q->next=p;
              q=p;
              p->next=NULL;
          }
           return 1;
    }


int LinkInsert_L(LinkList &L,int i,ElemType e)
{
    LinkList s,p;
    int j;
    p=L;j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return 0;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return 1;
}

int ListDelete_L(LinkList &L,int i,ElemType &e)
{
    LinkList q,p;
    p=L;
    int j=0;
    while(p->next && j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||j>i-1)
        return 0;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return 1;
}

void PrintList_L(LinkList &L)
{
LinkList p;
p=L->next;
while(p)
  {
   printf("%d\n",p->data);
   p=p->next;
  

  }
}

int main()
{
    int number,k;
    //int i;

 
//   LinkList L;
    printf("请依次输入5个整数:\n");
    InitList_L(L);
    CreateList_L(L,5);
    printf("the \n");
    PrintList_L(L);
    printf("请按提示,选择操作选项:\n");
    printf("1 插入元素\n");
    printf("2 删除元素\n");
    printf("3 退出\n");
    scanf("%d",&number);
    switch(number)
    {
    case 1 :printf("选项1\n");
         LinkInsert_L(L,3,9);
        PrintList_L(L);
        break;
    case 2 :printf("选项2\n");
        ListDelete_L(L,4,k);  //删除第4个元素,从1编号

        PrintList_L(L);
        break;
    case 3 :printf("选项3\n");
        break;
    default:printf("enter data error!\n");
    }
    system("pause");
    return 0;
}
#3
七夜之华2014-11-12 23:12
回复 2 楼 soulmate1023
为什么你整理后的程序我在Devc++上面运行还是闪了一下,然后就没了。。。。貌似行不通的样子。。。。。
#4
soulmate10232014-11-13 16:43
回复 3 楼 七夜之华
?是吗?我这里没有呀

1