求大神帮忙看看为什么exe时停止工作
#include<stdio.h>#include<stdlib.h>
#define null 0
typedef int datatype;
typedef struct lnode
{
datatype data;
struct lnode*next;
}lnode,*linkedlist;
/*链表的初始化*/
lnode *init(lnode *l)
{ lnode *p1,*p2;
p1=p2=(lnode *)malloc(sizeof(lnode)); //申请新节点
if(p1 == NULL || p2 ==NULL)
{
printf("内存分配失败\n");
exit(0);
}
scanf("%d",&p1->data); //输入新节点
p1->next = NULL; //新节点的指针置为空
while(p1->data > 0) //输入的值大于0则继续,直到输入的值为负
{
if(l == NULL) //空表,接入表头
{
l= p1;
}
else
{
p2->next = p1; //非空表,接入表尾
}
p2 = p1;
p1=(lnode *)malloc(sizeof(lnode)); //再重申请一个节点
if(p1 == NULL || p2 ==NULL)
{
printf("内存分配失败\n");
exit(0);
}
scanf("%d",&p1->data);
p1->next = NULL;
}
printf("链表创建成功?\n");
return l; //返回链表的头指针
}
/*清空单链表*/
void clear(lnode *l)
{
lnode *p;
p=l->next;
if(!p)
printf("空");
else p->next=l->next;
}
/*检查链表是否为空*/
int empty(lnode *l)
{
lnode *p;
p=l->next;
if(!p)
{printf("空");
return 1;
}
else return 0;
}
/*遍历单链表*/
void traverse(lnode *l)
{
lnode *p;
printf("建立的单链表为:\n");
p=l->next;
while(p)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}
/*单链表的长度*/
int length(lnode *l)
{int count=0;
lnode *p;
p=l->next;
while(p)
{
count++;
p=p->next;
}
printf("输出长度为%d\n",count);
return count;
}
/*从单链表中寻找元素*/
int get(lnode *l,int i)
{int j=0;
lnode *p;
p=l->next;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j<i)
return 0;
}
/*从单链表中寻找与给定元素值相同元素在链表的位置*/
int locate(lnode *l,datatype x)
{
lnode *p;
p=l->next;
if(p!=NULL)
{
printf("空");
}
if(x < 0)
printf("给定值X不合法\n");
while(((p->data)!=x)&&(p->next)) //判断是否到链表末尾,以及是否存在所要找的元素
p = p->next;
if((p->data != x)&&(p!=null))
printf("在链表中未找到x值\n");
if(p->data == x)
{
printf("元素 %d 的地址为 0x%x\n",x,&(p->data));
}
}
/*插入元素*/
int insert(lnode *l,int i,datatype x)
{int j=0;
lnode *p,*s;
p=l->next;
while((p&&j)<(i-1))
{
p=p->next;
++j;
}
if(!p||j<i-1)
return 0;
s=(lnode *)malloc(sizeof(lnode));
s->data=x;
s->next=p->next;
p->next=s;
printf("插入元素成功\n");
return 1;
}
/*删除元素*/
int del(lnode *l,int i,datatype x)
{
int j=0;
lnode *p,*q;
p=l->next;
while((p&&j)<(i-1))
{
p=p->next;
++j;
}
if(!p||j<i-1)
return 0;
q=p->next;
p->next=q->next;
x=q->data;
free(q);
return 2;
}
/*用尾插法建立单链表*/
void create(lnode *l,int n)
{ int i;
lnode *p;
l=(lnode*)malloc(sizeof(lnode));
l->next=null;
for(i=n;i>0;--i)
p = (lnode *)malloc(sizeof(lnode)); //申请一个新节点
scanf("%d",&p->data);
p->next =l->next;
}
int main()
{
lnode *l;
init(l); //链表初始化
clear(l); //清空单链表
empty(l); // 检查链表是否为空
traverse(l); //遍历链表
length(l); //链表的长度
get(l,4);//从单链表中寻找第四个元素
locate(l,7);// 寻找与7相同元素在链表的地址
insert(l,3,10); //第三个元素前插入元素10
del(l,2,4);//删除第二个元素
create(l,6);//用尾插法建立单链表
return 0;
}