就算按图片里修改 还是一样报错 而且感觉代码里没有图片上的语法问题……
#define null 0;
typedef int ElemType;
typedef struct node
{
ElemType data; /*数据域*/
struct node *next; /*指针域*/
}Lnode; /*定义基本线性表的结点结构* /
Lnode *head; /*定义基本线性表的表头指针为全局变量* /
int length(Lnode *p) /*求指针p指向的基本线性表的长度* /
{
int n=0; /*结点位置计数器* /
Lnode *q=p; /* 定义临时指针q */
while(q!=null) /* 当基本线性表不空时,统计基本线性表中的结点数 */
{
n++;
a=q->next;
}
return (n); /*返回统计的结点数*/
}
ElemType get(Lnode *p,int i)
/*求指针p指向的基本线性表中第i个结点的值* /
{
int j=1; /*查找结点位置的计数器*/
Lnode *q=p; /* 定义临时指针q */
while(j<i && q!=null) /* 查找结点i是否存在 * /
{
q=q->next;
j++;
}
if(q!=null) /*如果存在,返回其数据域的值 */
return (q->data);
else /*否则,输出其位置参数不正确*/
printf("位置参数不正确!\n");
}
int Locate(Lnode *p,ElemType x)
/*求指针p指向的基本线性表中的数据元素X的位置序号 */
{
int n=0; /* 结点位置计数器 */
Lnode *q=p; /* 定义临时指针q */
while (q!=null && q->data!=x)
/* 在基本线性表中查找数据元素x的位置 * /
{q=q->next;
n++;
}
if(q==null) /*如果不存在,则返回-1 */
return (-1);
else /* 否则,返回结点的位置序号 */
return (n+1);
}
void insert(ElemType x,int i)
/* 在基本线性表的的位置i,插入数据元素 * /
{
int j=1; /* 结点位置计数器 */
Lnode *s,*q; /* 定义临时指针s,q */
s=(Lnode *)malloc(sizeof(Lnode)); /*生成新结点*/
s->data=x; /*将新结点的数据域置为x*/
q=head;
if(i==1) /*如果插入位置是1,则将新结点插入到表头 */
{
s->next=q;
head=s;
}
else /*否则,查找插入位置*/
{
while((j<i-1)&&(q->next!=null))
{
q=q->next;
j++;
}
if(j==i-1)
{
s->next=q->next;
q->next=s;
}
else /*插入位置不存在*/
printf("位置参数不正确!\n");
}
}
void delete(Lnode *p,int i)
/* 将指针p指向的基本线性表中的位置i的数据元素删除 * /
{
int j=1; /* 结点位置计数器 */
Lnode *q=p,*t;
if(i==1)
/*如果位置序号为1,则将基本线性表的第1个数据元素结点删除 */
{
t=q;
p=q->next;
}
else /*否则,从表头查找相应的位置序号i*/
{
while((j<i-1)&&(q->next!=null))
{
q=q->next;
j++;
}
if(q->next!=null && j==i-1)
/*如果找到位置i,则将该位置的结点删除*/
{
t=q->next;
q->next=t->next;
}
else /*否则位置i不存在*/
printf("位置参数不正确!\n");
}
if(t!=null)
free(t);
}
void display(Lnode *p)
{
Lnode *q;
q=p;
printf("单链表显示:");
if(q==null)
printf("链表为空");
else if(q->next==null)
printf("%d\n",q->data);
else
{
while(q->next!=null)
{
printf("%d->\n",q->data);
q=q->next;
}
printf("%d\n",q->data);
}
printf("\n");
}
main( )
{
Lnode *q;
int d,i,n,select,k,flag=1;
head=null;
printf ("请输入数据长度:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf ("将数据到插入到链表中:");
scanf("%d",&n);
insert(d,i);
}
display(head);
printf("\n");
while(flag)
{
printf("1---------求长度\n");
printf("2---------取结点\n");
printf("3-------求值查找\n");
printf("4--------增加结点\n");
printf("5--------删除结点\n");
printf("6--------退出\n");
printf("input your select:");
scanf("%d",&select);
switch(select)
{
case 1:{
d=length(head);
printf("\n单链表的长度为:%d",d);
printf("\n");
display(head);
printf("\n");
}
break;
case 2: {
printf("\n请输入取得结点的位置:");
scanf("%d",&d);
k=get(head,d);
printf("%d\n",k);
display(head);
printf("\n");
}
break;
case 3:{
printf("\n请输入要查找的数据:");
scanf("%d",&d);
k=locate(head,d);
printf("%d\n",k);
display(head);
printf("\n");
}
break;
case 4:{
printf("\n请输入增加结点的位置:");
scanf("%d",&k);
printf("\n请输入增加结点的数据:");
scanf("%d",&d);
insert(d,k);
display(head);
printf("\n");
}
break;
case 5:{
printf("\n请输入删除结点的位置:");
scanf("%d",&d);
delete(head,d);
printf("\n");
display(head);
printf("\n");
}
break;
case 6: flag=0;
break;
}
}
}