c语言链表基本操作问题


#include
#include

#define OK 1;
#define ERROR 0;
#define OVERFLOW -2;

typedef int Status;

#define MAXSIZE 100;
//单链表的存储
typedef struct LNode
{
 int data;
 struct LNode *next;
}LNode,*Linklist;


//前插法
void CreateList(Linklist &L,int n)
{
 L = new LNode;
 L->next = NULL;
 Linklist p;
 for(int i = 0 ;i < n ;i++)
 {
  p = new LNode;
  scanf("%d",&p->data);
  p->next = L->next;
  L->next = p;
 }
}
//单链表的取值
Status GetElem(Linklist L,int i,int &e)
{
 Linklist p;
 int j;
 p = L->next;
 j = 1;
 while(p&&(jnext;
  j++;
 }
 if(!p || (j>i))
  return ERROR;
 e = p->data;
 return OK;
}

//单链表的插入
Status ListInsert(Linklist &L,int i,int e)
{
 Linklist p,s;
 int j;
 p = L;
 j=0;

 while(p&&j-1)
 {
  p = p->next;
  j++;
 }

 if(!p || j>i-1)
  return ERROR;
 s = new LNode;
 s->data = e;
 s->next = p->next;
 p->next = s;
 return OK;
}

//单链表的删除
Status ListDelete(Linklist &L,int i)
{
 Linklist q,p;
 int j = 0;
 p = L;
 while((p->next) && j-1)
 {
  p = p->next;
  j++;
 }
 if (!(p->next) || (j>i-1))
  return ERROR;
 q = p->next;
 p->next = q->next;
 delete q;
 return OK;
}

//单链表的遍历
void DisplayList(Linklist L)
{
 Linklist p;
 p = L->next;
 while(p != NULL )
 {
  printf("%d\t",p->data);
  p = p->next;
 }
}

int main()
{
 int n,x,a,j;
 int num,k;   

 Linklist mylist;

 printf("准备输入多少个数据:");
 scanf("%d\n",&n);
 CreateList(mylist,n);
 

 printf("单链表的内容为:\n");
 DisplayList(mylist);

 //插入
 printf("\n请输入你要插入的位置:");
 scanf("%d\n",&j);
 printf("\n请输入你要插入的数字:");
 scanf("%d\n",&num);
 ListInsert(mylist,j,num);

 printf("\n插入后的内容为:");
 DisplayList(mylist);

 //删除
 printf("\n请输入你要删除第几个字符:");
 scanf("%d\n",&k);
 ListDelete(mylist,k);

 printf("删除后的内容为:");
 DisplayList(mylist);

 return 0;
}

求问我这个为什么到插入时候就会出现错误

把框里的\n去掉

img

调试下,看看你的内存指针这些问题。

这不就完事了吗,(看代码,望采纳,求求了)

 
#include<stdio.h>
#include<stdlib.h>
 
#define OK 1;
#define ERROR 0;
#define OVERFLOW -2;
 
typedef int Status;
 
#define MAXSIZE 100;
//单链表的存储
typedef struct LNode
{
 int data;
 struct LNode *next;
}LNode,*Linklist;
 
 
//前插法
void CreateList(Linklist &L,int n)
{
 L = new LNode;
 L->next = NULL;
 Linklist p;
 for(int i = 0 ;i < n ;i++)
 {
  p = new LNode;
  scanf("%d",&p->data);
  p->next = L->next;
  L->next = p;
 }
}
//单链表的取值
Status GetElem(Linklist L,int i,int &e)
{
 Linklist p;
 int j;
 p = L->next;
 j = 1;
 while(p&&(j<i))
 {
  p = p->next;
  j++;
 }
 if(!p || (j>i))
  return ERROR;
 e = p->data;
 return OK;
}
 
//单链表的插入
Status ListInsert(Linklist &L,int i,int e)
{
 Linklist p,s;
 int j;
 p = L;
 j=0;
 
 while(p&&j<i-1)
 {
  p = p->next;
  j++;
 }
 
 if(!p || j>i-1)
  return ERROR;
 s = new LNode;
 s->data = e;
 s->next = p->next;
 p->next = s;
 return OK;
}
 
//单链表的删除
Status ListDelete(Linklist &L,int i)
{
 Linklist q,p;
 int j = 0;
 p = L;
 while((p->next) && j<i-1)
 {
  p = p->next;
  j++;
 }
 if (!(p->next) || (j>i-1))
  return ERROR;
 q = p->next;
 p->next = q->next;
 delete q;
 return OK;
}
 
//单链表的遍历
void DisplayList(Linklist L)
{
 Linklist p;
 p = L->next;
 while(p != NULL )
 {
  printf("%d\t",p->data);
  p = p->next;
 }
}
 
int main()
{
 int n,x,a,j;
 int num,k;   
 
 Linklist mylist;
 
 printf("准备输入多少个数据:");
 scanf("%d",&n);
 CreateList(mylist,n);
 
 
 printf("单链表的内容为:\n");
 DisplayList(mylist);
 
 //插入
 printf("\n请输入你要插入的位置:");
 scanf("%d",&j);
 printf("\n请输入你要插入的数字:");
 scanf("%d",&num);
 ListInsert(mylist,j,num);
 
 printf("\n插入后的内容为:");
 DisplayList(mylist);
 
 //删除
 printf("\n请输入你要删除第几个字符:");
 scanf("%d",&k);
 ListDelete(mylist,k);
 
 printf("删除后的内容为:");
 DisplayList(mylist);
 
 return 0;
}