首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教这里是哪错了啊编译没错,但是运行就是停止工作啊求大神啊

2012-12-17 
请问这里是哪错了啊?编译没错,但是运行就是停止工作啊···求大神啊!#includestdio.h#includemalloc.h#i

请问这里是哪错了啊?编译没错,但是运行就是停止工作啊···求大神啊!

#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node{
int data;
    struct node *next;
}LNode,*Linklist;
Linklist CreateLinklist(int n)
{
LNode *p,*r,*list=NULL;
int e,i;
for(i=1;i<=n;i++)
{
scanf("%d",&e);
p=(LNode *)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
if(!list)
list=p; 
else 
r->next=p;
    r=p;
}
return list;}
void insertlist(Linklist *list,Linklist q,int e)
{
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
p->data=e;
if(!*list)
{
*list=p;
p->next=NULL;
}
else
{p->next=q->next;
q->next=p;
}
}
int main()
{int i,e,a,x;
Linklist q,l;
printf("请输入数据:");
q=CreateLinklist(8);
for(i=0;i<8;i++);
while(q)
{
printf("%4d",q->data);
q=q->next;
}
printf("\n");
printf("请输入要插入元素的位置:");
scanf("%d",&a);
printf("\n请输入要插入的元素:");
scanf("%d",&x);
printf("\n");
for(i=0;i<a;i++)
l=l->next;
insertlist(&q,l,e);
while(q)
{printf("%4d",q->data);
q=q->next;
}
printf("\n");
return 0;
}
[最优解释]


#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node {
int data;
struct node *next;
} LNode, *Linklist;
Linklist CreateLinklist(int n) {
LNode *p, *r, *list = NULL;
int e, i;
for (i = 1; i <= n; i++) {
scanf("%d", &e);

p = (LNode *) malloc(sizeof(LNode));
p->data = e;
p->next = NULL;
if (!list)
list = p;
else
r->next = p;
r = p;
}
return list;
}
void insertlist(Linklist p, int local, int e)//这个函数我重写了,local是要插入的位置,找到原链表的前一个位置插入一个新节点
 {
Linklist temp;
int i;
temp = (Linklist) malloc(sizeof(LNode));
temp->data = e;
for(i=1;i<local-1;i++){
p=p->next;
}
temp->next=p->next;
p->next=temp;

}
int main() {
int i, a, x;
Linklist q,pHead;//pHead指向头结点的指针很重要
printf("请输入数据:\n");
q = CreateLinklist(8);
pHead=q;
//for (i = 0; i < 8; i++)
//;
while (q) {
printf("%4d", q->data);
q = q->next;
}
q=pHead;//这步很重要,上面遍历后q指向的不是头结点了,是末尾了也就是空指针
printf("\n");
printf("请输入要插入元素的位置:");
scanf("%d", &a);
printf("\n请输入要插入的元素:");
scanf("%d", &x);
printf("\n");
//for (i = 0; i < a; i++) //这个有问题l是指向LNode的指针,但这里l是什么没人知道
//l = l->next;//
insertlist(q, a, x);//insertlist(q,a,x);
while (q) {
printf("%4d", q->data);
q = q->next;
}
q=pHead;
printf("\n");
return 0;
}
这个程序可以运行在楼主基础上改的
[其他解释]
 p->next == NULL)  


       printf("REEOR");
     p->next=p->next->next;
 free(p->next);
}
else if(pos=1)
{*list=p->next;
free(p);}
else if(pos=(length+1))
{for(i=1;i<length;i++)
p=p->next;
free(p);}
else
printf("please input legal postion"); 
}


int main()
{int i,a,x,pos;
Linklist q,l;
printf("请输入数据:");
q=l=CreateLinklist(length);
for(i=0;i<8;i++);
while(q)
{
printf("%4d",q->data);
q=q->next;
}
printf("\n");
printf("请输入要插入元素的位置:");
scanf("%d",&a);
printf("\n请输入要插入的元素:");
scanf("%d",&x);
printf("\n"); 
q=l;
for(i=1;i<a-1;i++)
l=l->next;
insertlist(&q,l,x);
while(q)
{printf("%4d",q->data);
q=q->next;
}

printf("\n请输入要删除元素的位置:");
scanf("%d",&pos);
printf("\n");
dellist(&q,pos);
while(q){
printf("%4d",q->data);
q=q->next;
}
return 0;
}
 

[其他解释]
变量Linklist l;
这个变量没有初始化,就直接用了(l=l->next;)
[其他解释]

引用:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node {
int data;
struct node *next;
} LNode, *Linklist;
Linklist CreateLinklist(int n) {
LNode *p, *r, *list = NULL;
int……

我知道我哪里错了,l那里我知道,改来改去改丢了,就是insertlist函数那里,少了一个q->data=e;谢谢啦!!!!
[其他解释]
引用:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node {
int data;
struct node *next;
} LNode, *Linklist;
Linklist CreateLinklist(int n) {
LNode *p, *r, *list = NULL;
int……


加上删除函数又停止工作了,我都无奈了,大神再给指导一下吧!!!#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define length 8
typedef struct node{
int data;
    struct node *next;
}LNode,*Linklist;
Linklist CreateLinklist(int n)
{
LNode *p,*r,*list=NULL;
int e,i;
for(i=1;i<=n;i++)
{
scanf("%d",&e);
p=(LNode *)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
if(!list)
list=p; 
else 
r->next=p;
    r=p;
}
return list;
}
void insertlist(Linklist *list,Linklist q,int e)
{
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
if(!*list)
{
*list=p;
p->next=NULL;
}
else
{p->next=q->next;
q->next=p;
p->data=e;
}
}


void dellist(Linklist *list,int pos)
{
int i=0;
Linklist p;
p=*list;
if(pos>1&&pos<(length+1))
{while (p->next!=NULL&&i<(pos-1))
{
     i++;
     p=p->next;}
if(i != pos-1 
[其他解释]
引用:

引用:#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node {
int data;
struct node *next;
} LNode, *Linklist;
Linklist CreateLinklist(int n) {
……

#include<malloc.h>
#include<string.h>
#include<stdio.h>
#define length 8
typedef struct node {
int data;
struct node *next;
} LNode, *Linklist;
Linklist CreateLinklist(int n) {
LNode *p, *r, *list = NULL;
int e, i;
for (i = 1; i <= n; i++) {
scanf("%d", &e);
p = (LNode *) malloc(sizeof(LNode));
p->data = e;
p->next = NULL;
if (!list)
list = p;
else
r->next = p;
r = p;
}
return list;
}
void insertlist(Linklist *list, Linklist q, int e) {
Linklist p;
p = (Linklist) malloc(sizeof(LNode));
if (!*list) {
*list = p;
p->next = NULL;
} else {
p->next = q->next;
q->next = p;
p->data = e;
}
}

void dellist(Linklist *list, int pos) {
int i = 1;
Linklist p, del;
p = *list;
if (pos > 1 && pos < (length + 1)) {
while (p->next != NULL && i <(pos-1)) {
i++;
p = p->next;
}
if (i != pos - 1 
[其他解释]
 p->next == NULL)
printf("REEOR");
del=p->next;
p->next = p->next->next;

free(del);//free前先保存那个节点,否者free了怎么找剩下的节点
} else if (pos == 1) //你少了一个=号
{
del=*list;
*list = p->next;
free(del);
} else if (pos ==(length + 1)) {
for (i = 1; i < length; i++)
p = p->next;
del=p->next;
p->next=NULL;
free(del);
} else
printf("please input legal postion");
}

int main() {
int i, a, x, pos;
Linklist q, l,pHead;
printf("请输入数据:");
pHead=q = l = CreateLinklist(length);
for (i = 0; i < 8; i++)
;
while (q) {
printf("%4d", q->data);
q = q->next;
}
printf("\n");
printf("请输入要插入元素的位置:");
scanf("%d", &a);
printf("\n请输入要插入的元素:");
scanf("%d", &x);
printf("\n");
q = l;
for (i = 1; i < a - 1; i++)
l = l->next;
insertlist(&q, l, x);
while (q) {
printf("%4d", q->data);
q = q->next;
}//这个q遍历后不指向头结点了,所以必须让他重新指向头结点
q=pHead;
printf("\n请输入要删除元素的位置:");
scanf("%d", &pos);
printf("\n");
dellist(&q, pos);
while (q) {
printf("%4d", q->data);
q = q->next;
}
return 0;
}

热点排行