|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
单链表的基本操作问题,调试的过程中出现问题卡在display函数中加粗的那一部分,错误信息是:“ 中的 0x01161662 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突”,希望有人解答,谢谢了!!!
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
typedef struct List
{
ElemType data;
struct List *next;
}linklist;
Status CreateList(linklist *L)
{
//创建一个单链表
linklist *p;
L->next=NULL;
p=(linklist *)malloc(sizeof(linklist));
if(!p){
printf("内存分配失败!");
return 0;
}
return OK;
}
Status listinsert(linklist *L,int i,ElemType e)
{
//单链表的简单插入
int j;
linklist *p,*q;
q=L;
p=(linklist *)malloc(sizeof(linklist));
if(!p)
return ERROR;
p->data=e;
for(j=0;j<i-1;++j){
q=q->next;
}
p->next=q->next;
q->next=p;
return OK;
}
Status listdel(linklist *L,int i,ElemType *e)
{
//单链表的删除操作
int j;
linklist *p;
linklist *q=(linklist *)malloc(sizeof(linklist));
p=L;
for(j=0;j<i-1;++j){
p=p->next;
}
q=p->next;
*e=q->data;
p->next=q->next;
q->next=NULL;
free(q);
return OK;
}
Status display(linklist *L)
{
linklist *p;
p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}
int main(void)
{
int i,di;
ElemType e,de;
linklist *L=(linklist *)malloc(sizeof(linklist));
if(!L)
return ERROR;
printf("please input the insert lo & elem:\n");
scanf("%d %d",&i,&e);
listinsert(L,i,e);
printf("The list after insert is ;\n");
display(L);
printf("please input the del number :\n");
scanf("%d",&di);
listdel(L,di,&de);
printf("The del num is %d\n",de);
printf("The list after del is :\n");
display(L);
free(L);//手动释放堆中分配的内存
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
typedef struct List
{
ElemType data;
struct List *next;
}linklist;
// 没有用到 CreateList ?
//Status CreateList(linklist *L)
//{
// //创建一个单链表
// linklist *p;
//
// L->next = NULL;
// p = (linklist *)malloc(sizeof(linklist));
// if(!p)
// {
// printf("内存分配失败!");
// return 0;
// }
// return OK;
//}
Status listinsert(linklist *L, int i, ElemType e)
{
//单链表的简单插入
int j;
linklist *p, *q;
q = L;
p = (linklist *)malloc(sizeof(linklist));
if(!p)
return ERROR;
p->data = e;
for(j = 0; j<i - 1; ++j)
{
q = q->next;
}
p->next = q->next;
q->next = p;
return OK;
}
Status listdel(linklist *L, int i, ElemType *e)
{
//单链表的删除操作
int j;
linklist *p;
linklist *q = (linklist *)malloc(sizeof(linklist));
p = L;
for(j = 0; j<i - 1; ++j)
{
p = p->next;
}
q = p->next;
*e = q->data;
p->next = q->next;
q->next = NULL;
free(q);
return OK;
}
Status display(linklist *L)
{
linklist *p;
p = L->next;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return OK;
}
int main(void)
{
int i, di;
ElemType e, de;
linklist *L = (linklist *)malloc(sizeof(linklist));
if(!L)
return ERROR;
L->next = NULL;
printf("please input the insert lo & elem:\n");
scanf("%d %d", &i, &e);
listinsert(L, i, e);
printf("The list after insert is ;\n");
display(L);
printf("please input the del number :\n");
scanf("%d", &di);
listdel(L, di, &de);
printf("The del num is %d\n", de);
printf("The list after del is :\n");
display(L);
free(L);//手动释放堆中分配的内存
return 0;
}
|
|