为什么这个代码会卡在那里呀?

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef int ElemType;

typedef struct LNode  //节结点数据类型定义
{
    ElemType data;//存放数据
    struct LNode *next;//指向下一个指针
}LinkList;

void CreatListR_L(LinkList *L,ElemType a[],int n)//尾插法建表
{
    LinkList *s,*r;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));//创建头结点
    r=L;//r始终指向尾结点,开始时指向头结点
    for(i=0;i<n;i++)
        {
            s=(LinkList *)malloc(sizeof(LinkList));//生成新节点
            s->data=a[i];//新结点插入数据
            r->next=s;//将s插入r后
            r=s;
        }
    r->next=NULL;//尾结点设置为空
}

void IinkList(LinkList *L)//初始化单链表
{
    L=(LinkList*)malloc(sizeof(LinkList ));
    L->next=NULL;
}

void DestoryList_L(LinkList *L)//摧毁单链表
{
    LinkList *pre=L,*p=L->next;//*pre指向p的前驱结点
    while(p!=NULL)//扫描链表
        {
            free(pre);
            pre=p;
            p=pre->next;
        }
    free(pre);
}

_Bool ListEmpty_L(LinkList *L)//判断单链表是否为空
{
    return(L->next=NULL);
}

int ListLength_L(LinkList *L)//输出单链表长度
{
    LinkList *p=L;
    int n=0;
    while (p->next!=NULL)//指针p向后扫描,计算单链表长度
        {
            n++;
            p=p->next;
        }
    return n;   //返回长度
}

int GetElem_L(LinkList *L,int i,ElemType e)//求单链表中某个数据元素值
{
    int j=0;
    LinkList *p=L;//设置指针p指向L的头结点
    while(p!= NULL&&j<i)//查找第i个结点
        {
            j++;
            p=p->next;
        }
    if(p==NULL)//没有这个结点
        {
            return 0;
        }
    else//存在这个结点,返回相应数值e
        {
            e=p->data;
            return e;
        }
}

int LocateElem_L(LinkList *L,ElemType e)//查找某元素的逻辑位置
{
    int i=1;//从1开始
    LinkList *p=L->next;//p指向开始结点
    while(p!=NULL&&p->data!=e)//查找data为e的结点,其序号为i
        {
           p=p->next;
           i++;
        }
    if(p==NULL)
        return 0;
    else
        return i;
}

_Bool LinkInsert_L(LinkList *L,int i,ElemType e)//在单链表第i个位置前插入数据,即将数据插入到第几位
{
LinkList *p=L,*s;
    int j=0;
    if(i<1)
        return 0;
    while(p!=NULL&&j<i-1)//寻找第i-个结点
        {
            j++;
            p=p->next;
        }
    if(p==NULL)//找不到
        return 0;
    else //找到了,插入新结点
        {
            s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
            s->data=e;
            s->next=p->next;
            p->next=s;
            return 1;
        }
}

void DispList(LinkList *L)  //输出链表(像判空,计算长度,输出链表无增减操作用*L,具体的我暂时说不来)
{
     LinkList *p = L->next;
     while(p != NULL)
      {
        printf("%d", p->data);
        p = p->next;
      }
     printf("\n");

}

int DeleteList(LinkList *L, int i, ElemType *e)// 删除操作:删除第i个元素,用&e(地址)来装删除的元素,可以知道删除了什么
{
      int j = 0;
      LinkList *p = L, *q;
      while((j < i - 1) && (p != NULL))
      {
        j++;
        p = p->next;
      }

      if(p == NULL)
      {
        return 0;
      }
      else
      {
        q = p->next;
        if(q == NULL)
          return 0;
        e =&(q->data);
        p->next = q->next;
        free(q);
        return 1;
      }
}

void DestroyList(LinkList *L)//销毁链表
{
     LinkList *p = L,*q = p->next;

     while(q != NULL)                //重点×4
       {
         free(p);          //释放p(相当于C++的Delete)
         p = q;
         q = p->next;
       }
    free(p);
}

void main()
{
    LinkList *L;
    ElemType e;
    printf("(1)初始化单链表L\n");
 IinkList(L);
 printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
 ElemType a[5]={'a','b','c','d','e'};
 CreatListR_L(L, a, 5);
 printf("(3)输出单链表:\n");
 DispList(L);
 printf("(4)输出单链表的长度:%d\n",ListLength_L(L));
 printf("(5)单链表L为:%s\n",(ListEmpty_L(L) ? "空":"非空"));
 GetElem_L(L, 2, e);
 printf("(6)单链表L的第3个元素为%c\n",GetElem_L(L, 3, e));
 printf("(7)元素a的位置为%d\n", LocateElem_L(L, 'a'));
 printf("(8)在第4个元素位置上插入元素r\n");
 LinkInsert_L(L, 4, 'r');
 printf("(9)输出单链表L:\n");
 DispList(L);
 printf("(10)删除L的第3个元素\n");
 DeleteList(L, 3, e);
 printf("(9)输出单链表L:\n");
 DispList(L);
 printf("(12)释放单链表L\n");
 DestroyList(L);
 return 0;
}

 

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef char ElemType;                                  /////////////////////////char类型

typedef struct LNode  //节结点数据类型定义
{
    ElemType data;//存放数据
    struct LNode *next;//指向下一个指针
}LinkList;

void CreatListR_L(LinkList *(&L),ElemType a[],int n)//尾插法建表 ///////////////////借助C++的引用(别名)  在L前面加个&
{
    LinkList *s,*r;
    int i;
//    L=(LinkList *)malloc(sizeof(LinkList));//创建头结点        //////////////////////////不需要再malloc一次
    r=L;//r始终指向尾结点,开始时指向头结点
    for(i=0;i<n;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));//生成新节点
        s->data=a[i];//新结点插入数据
        r->next=s;//将s插入r后
        r=s;
    }
    r->next=NULL;//尾结点设置为空
}

void IinkList(LinkList * (&L))//初始化单链表              ///////////////////借助C++的引用(别名)  在L前面加个&
{
    L=(LinkList*)malloc(sizeof(LinkList ));
    L->next=NULL;
}

void DestoryList_L(LinkList *L)//摧毁单链表
{
    LinkList *pre=L,*p=L->next;//*pre指向p的前驱结点
    while(p!=NULL)//扫描链表
    {
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);
}

bool ListEmpty_L(LinkList *L)//判断单链表是否为空
{
    return(L->next==NULL);      ///////////////////////等于号不是赋值号
}

int ListLength_L(LinkList *L)//输出单链表长度
{
    LinkList *p=L;
    int n=0;
    while (p->next!=NULL)//指针p向后扫描,计算单链表长度
    {
        n++;
        p=p->next;
    }
    return n;   //返回长度
}

int GetElem_L(LinkList *L,int i,ElemType &e)//求单链表中某个数据元素值////////////////e前面加一个&表示引用
{
    int j=0;
    LinkList *p=L;//设置指针p指向L的头结点
    while(p!= NULL&&j<i)//查找第i个结点
    {
        j++;
        p=p->next;
    }
    if(p==NULL || i<1)//没有这个结点  或者   i不合法小于1/////////////////////////////
    {
        return 0;
    }
    else//存在这个结点,返回相应数值e
    {
        e=p->data;
        return 1;
    }
}

int LocateElem_L(LinkList *L,ElemType e)//查找某元素的逻辑位置
{
    int i=1;//从1开始
    LinkList *p=L->next;//p指向开始结点
    while(p!=NULL&&p->data!=e)//查找data为e的结点,其序号为i
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
        return 0;
    else
        return i;
}

int LinkInsert_L(LinkList *L,int i,ElemType e)//在单链表第i个位置前插入数据,即将数据插入到第几位
{
    LinkList *p=L,*s;
    int j=0;
    if(i<1)
        return 0;
    while(p!=NULL&&j<i-1)//寻找第i-个结点
    {
        j++;
        p=p->next;
    }
    if(p==NULL)//找不到
        return 0;
    else //找到了,插入新结点
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
        s->data=e;
        s->next=p->next;
        p->next=s;
        return 1;
    }
}

void DispList(LinkList *L)  //输出链表(像判空,计算长度,输出链表无增减操作用*L,具体的我暂时说不来)
{
    LinkList *p = L->next;
    while(p != NULL)
    {
        printf("%c", p->data);          //////////////////////////////%c
        p = p->next;
    }
    printf("\n");

}

int DeleteList(LinkList *L, int i, ElemType &e)// 删除操作:删除第i个元素,用&e(地址)来装删除的元素,可以知道删除了什么//////////////////e不要用指针用引用&e
{
    int j = 0;
    LinkList *p = L, *q;
    while((j < i - 1) && (p != NULL))
    {
        j++;
        p = p->next;
    }

    if(p == NULL)
    {
        return 0;
    }
    else
    {
        q = p->next;
        if(q == NULL)
            return 0;
        e =(q->data);       ///////////////////////////////////////
        p->next = q->next;
        free(q);
        return 1;
    }
}

void DestroyList(LinkList *L)//销毁链表
{
    LinkList *p = L,*q = p->next;

    while(q != NULL)                //重点×4
    {
        free(p);          //释放p(相当于C++的Delete)
        p = q;
        q = p->next;
    }
    free(p);
}

int main()
{
    LinkList *L;
    ElemType e;
    printf("(1)初始化单链表L\n");
    IinkList(L);
    printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
    ElemType a[5]={'a','b','c','d','e'};
    CreatListR_L(L, a, 5);
    printf("(3)输出单链表:\n");
    DispList(L);

    printf("(4)输出单链表的长度:%d\n",ListLength_L(L));
    printf("(5)单链表L为:%s\n",(ListEmpty_L(L) ? "空":"非空"));
    if(GetElem_L(L, 3, e))
        printf("(6)单链表L的第3个元素为%c\n",e);
    printf("(7)元素a的位置为%d\n", LocateElem_L(L, 'a'));
    printf("(8)在第4个元素位置上插入元素r\n");
    LinkInsert_L(L, 4, 'r');
    printf("(9)输出单链表L:\n");
    DispList(L);
    printf("(10)删除L的第3个元素\n");
    DeleteList(L, 3, e);
    printf("(9)输出删除的元素以及单链表L:\n%c  ",e);
    DispList(L);
    printf("(12)释放单链表L ");
    DestroyList(L);
    return 0;
}

 


希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html