程序代码如下
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType date;
struct node *next;
}Lnode;
Lnode *head;
int length(Lnode *p)
{
int n=0;
Lnode *q=p;
while(q!=NULL)
{
n++;
q=q->next;
}
return n;
}
ElemType get(Lnode*p,int i)
{
int j=1;
Lnode*q=p;
while(j<i&&q!=NULL)
{
q=q->next;
j++;
}
if(q!=NULL)
return (q->date);
else
printf("参数i不对!\n");
}
int loate(Lnode*p,ElemType x)
{
int n=0;
Lnode*q=p;
while(q->date!=x&&q!=NULL)
{
n++;
q=q->next;
}
if(q==NULL)
return -1;
else
return n+1;
}
void insert(ElemType x,int i)
{
int j=1;
Lnode *q,*s;
s=(Lnode*)malloc(sizeof(Lnode));
s->date=x;
q=head;
if(i==1)
{
s->next=q;
head=s;
}
else
{
while(j<i-1&&q!=NULL)
{
q=q->next;
j++;
}
if(j==i-1)
{
s->next=q->next;
q->next=s;
}
else
printf("参数 i 不对!");
}
}
void dele(Lnode*p,int i)
{
int j=1;
Lnode *q=p,*t;
if(i==1)
{
t=q;
p=q->next;
}
else
{
while(j<i-1&&q!=NULL)
{
q=q->next;
j++;
}
if(q->next!=NULL&&j==i-1)
{
t=q->next;
q->next=t->next;
}
else
printf("参数i不正确!");
}
free(t);
}
void display(Lnode*p)
{
Lnode*q;
q=p;
printf("单链表显示:");
if(q==NULL)
printf("链表为空!");
else if(q->next==NULL)
printf("%d\n",q->date);
else
{
while(q->next!=NULL)
{
printf("%d
",q->date);
q=q->next;
}
printf("%d",q->date);
}
//printf("%d",p->date);
}
int 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",&d);
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("please input your select:");
scanf("%d",&select);
switch(select)
{
case 1:
{
d=length(head);
printf("out the length:%d\n",d);
display(head);
printf("\n");
}
break;
case 2:
{
printf("please input the loate: ");
scanf("%d",&d);
k=get(head,d);
printf("您查找的数据是:%d\n",k);
display(head);
printf("\n");
}
break;
case 3:
{
printf("please input the date:");
scanf("%d",&d);
k=loate(head,d);
printf("数据的位置是:%d\n",k);
display(head);
printf("\n");
}
break;
case 4:
{
printf("please input the date:");
scanf("%d",&d);
printf("please input the loate:");
scanf("%d",&k);
insert(d,k);
display(head);
printf("\n");
}
break;
case 5:
{
printf("please input the loate:");
scanf("%d",&k);
dele(head,k);
display(head);
printf("\n");
}
break;
case 6:flag=-1;
break;
}
}
}