head.h
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int datatype;
typedef struct Node
{
union
{
int len;
datatype data;
};
struct Node *next;
}*linklist;
void menue();
linklist create(int flag);
void output(linklist L);
int insert_head(linklist L,datatype e);
int insert_rear(linklist L,datatype e);
int delete_head(linklist L);
int delete_rear(linklist L);
int insert_pos(linklist L,int pos,datatype e);
int delete_pos(linklist L,int pos);
int find_pos(linklist L,datatype key);
int change_pos(linklist L,int pos,datatype e);
int find_data(linklist L,int pos);
int insert_data(linklist L,datatype key,datatype e);
int delete_data(linklist L,datatype key);
int change_data(linklist L,datatype key,datatype e);
test.c:
int delete_pos(linklist L,int pos)
{
if(L==0||pos<1||pos>L->len)
{
return -1;
}
linklist p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
linklist q=p->next;
p->next=q->next;
free(q);
q=NULL;
L->len--;
}
int change_pos(linklist L,int pos,datatype e)
{
if(L==0||pos<1||pos>L->len)
{
return -1;
}
linklist p=L;
for(int i=0;i<pos;i++)
{
p=p->next;
}
p->data=e;
return 0;
}
int find_data(linklist L,int pos)
{
if(L==0||pos<1||pos>L->len)
{
return -1;
}
linklist p=L;
for(int i=0;i<pos;i++)
{
p=p->next;
}
return p->data;
}
int find_pos(linklist L,datatype key)
{
if(L==NULL||L->len==0)
{
printf("查找失败\n");
return -1;
}
linklist p=L;
int count=0;
while(p->next!=NULL)
{
p=p->next;
count++;
if(p->data==key)
{
return count;
}
}
return -1;
}
int insert_data(linklist L,datatype key,datatype e)
{
int pos=find_pos(L,key);
if(pos==-1)
{
return -1;
}
insert_pos(L,pos,e);
return 0;
}
int delete_data(linklist L,datatype key)
{
int pos=find_pos(L,key);
if(pos==-1)
{
return -1;
}
delete_pos(L,pos);
return 0;
}
int change_data(linklist L,datatype key,datatype e)
{
int pos=find_pos(L,key);
if(pos==-1)
{
return -1;
}
change_pos(L,pos,e);
return 0;
}
main.c
#include"head.c"
int main(int argc, const char *argv[])
{
linklist L=create(1);
menue();
int number;
while(1)
{
printf("\n请输入您的选择:");
scanf("%d",&number);
switch(number)
{
case 1:
{
int n;
printf("输入插入的数量:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
datatype e;
printf("输入插入的数");
scanf("%d",&e);
insert_head(L,e);
}
}
break;
case 2:
{
output(L);
}
break;
case 3:
{
int n;
printf("输入插入的数量:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
datatype e;
printf("输入插入的数");
scanf("%d",&e);
insert_rear(L,e);
}
}
break;
case 4:
delete_head(L);
break;
case 5:
delete_rear(L);
break;
case 6:
{
int pos;
printf("请输入插入的位置:\n");
scanf("%d",&pos);
datatype e;
printf("请输入插入的值:\n");
scanf("%d",&e);
insert_pos(L,pos,e);
}
break;
case 7:
{
int pos;
printf("请输入删除的位置:\n");
scanf("%d",&pos);
delete_pos(L,pos);
}
break;
case 8:
{
int pos;
printf("请输入修改的位置:\n");
scanf("%d",&pos);
datatype e;
printf("请输入修改的值:\n");
scanf("%d",&e);
change_pos(L,pos,e);
}
break;
case 9:
{
int pos;
printf("请输入查找的位置:\n");
scanf("%d",&pos);
int flag=find_data(L,pos);
if(flag==-1)
{
printf("查找失败\n");
}
else
printf("查找的数为:%d\n",flag);
}
break;
case 10:
{
datatype key;
printf("输入查找的数:\n");
scanf("%d",&key);
int pos=find_pos(L,key);
if(pos==-1)
{
printf("查找失败");
}
else
{
printf("查找成功,下标为:%d\n",pos);
}
}
break;
case 11:
{
datatype key;
printf("输入查找的数:");
scanf("%d",&key);
datatype e;
printf("输入插入的数:");
scanf("%d",&e);
int flag=insert_data(L,key,e);
if(flag==-1)
{
printf("插入失败\n");
}
else
printf("插入成功");
}
break;
case 12:
{
datatype key;
printf("输入查找的数:");
scanf("%d",&key);
int flag=delete_data(L,key);
if(flag==-1)
{
printf("删除失败\n");
}
else
printf("删除成功");
}
break;
case 13:
{
datatype key;
printf("输入修改的数:");
scanf("%d",&key);
datatype e;
printf("输入修改后的数");
scanf("%d",&e);
int flag=change_data(L,key,e);
if(flag==-1)
{
printf("修改失败\n");
}
else
printf("修改成功");
}
break;
default:printf("输入错误,请重新输入\n");break;
case 0:printf("退出程序\n");exit(0);
}
}
return 0;
}