|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Elemtype;
typedef struct node
{
int data;
struct node *next;
}node;
void mianban() //提示信息
{
printf("选择执行下列操作:\n");
printf("1.建立线性链表;\n");
printf("2.显示链表;\n");
printf("3.插入一个结点;\n");
printf("4.删除一个结点;\n");
printf("5.查询结点数据;\n");
printf("6.查询数据结点;\n");
}
int CreateList(node *L,Elemtype e) //建立链表
{
node *s;
L=(node*)malloc(sizeof(node));
if(!L)
{
return ERROR;
}
L->next=NULL;
while(e)
{
s=(node*)malloc(sizeof(node));
if(!s)
{
return ERROR;
}
s->data=e;
s->next=L->next;
L->next=s;
scanf("%d",&e);
}
return L;
}
int ListLength(node *L) //计算链表长度
{
node *p;
int i=0;
p=L->next;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
void ListInsert(node *L,int i,Elemtype e) //链表插入节点
{
node *p,*s;
int n,L_length;
p=L;
L_length=ListLength(L);
if(i>0&&i<=L_length+1)
{
for(n=0;n<i-1;i++)
{
p=p->next;
}
s=(node*)malloc(sizeof(node));
if(!s)
{
return ERROR;
}
s->data=e;
s->next=p->next;
p->next=s;
}
else
return ERROR;
}
void ListDelete(node *L,int i) //链表删除节点
{
node *p,*s;
int n,L_length;
p=L;
L_length=ListLength(L);
if(i>0&&i<=L_length)
{
for(n=0;n<i-1;i++)
{
p=p->next;
}
s=p->next;
p->next=s->next;
free(s);
}
}
int GetElem(node *L,int i,Elemtype *e) //查询链表结点并返回数据
{
node *p;
int n,L_length;
p=L;
L_length=ListLength(L);
if(i>0&&i<=L_length)
{
for(n=0;n<i;i++)
{
p=p->next;
}
e=p->data;
}
return e;
}
void ClearList(node *L) //清空链表
{
node *p,*s;
int i,L_length;
L_length=ListLength(L);
p=L;
for(i=0;i<L_length;i++)
{
s=p->next;
p->next=s->next;
free(s);
}
}
int LocateElem(node *L,Elemtype e,int n) //查询结点在第几位
{
node *p,*s;
int i;
int L_length=ListLength(L);
if(L->next==NULL)
{
return ERROR;
}
p=L->next;s=L;
for(i=1;p->data!=e&&i<=L_length;i++)
{
p=p->next;
s=s->next;
}
if(s->data!=e&&i==L_length)
{
i=0;
}
return i;
}
void XsList(node *L) //显示链表
{
int i;
node *p;
p=L->next;
while(p->next!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d",p->data);
}
int main()
{
int e,i,n;
int *m;
node *L;
while(1)
{
printf("\n");
mianban();
printf("\n");
scanf("%d",&n);
switch(n)
{
case 1:
scanf("%d",&e);
CreateList(L,e);
XsList(L);
break;
case 2:
XsList(L);
break;
case 3:
scanf("%d",&i);
scanf("%d",&e);
ListInsert(L,i,e);
XsList(L);
break;
case 4:
scanf("%d",&i);
ListDelete(L,i);
XsList(L);
break;
case 5:
scanf("%d",i);
GetElem(L,i,*m);
printf("%d",m);
break;
case 6:
scanf("%d",i);
LocateElem(L,i,e);
printf("%d",e);
break;
}
}
return 0;
}
调试的时候发现问题基本上出现在p->next,L->next上,可能是指针方面的问题,求大佬们指点!!! |
|