mian.c文件
#include "head.h"
int main(int argc, const char *argv[])
{
Linklist l=NULL;
int n;
datatype e;
printf("please enter n:");
scanf("%d",&n);
/*for(int i=0;i<n;i++)
{
//头插
printf("please enter elemen:");
scanf("%d",&e);
l=insert_head(e,l);
}*/
for(int i=0;i<n;i++)
{
//尾插
printf("please enter elemen:");
scanf("%d",&e);
l=insert_end(e,l);
}
// delete_head(l);
// l=delete_real(l);
// l=insert_data(l);
/* ouputs(l);
printf("请输入要插入的位置:");
int n1;
scanf("%d",&n1);
printf("please enter elemen:");
scanf("%d",&e);
l=insert_data(n1,l,e);
ouputs(l);
ouputs(l);
printf("请输入要修改的位置:");
int n1;
scanf("%d",&n1);
l=amend_data(n1,l);
ouputs(l);*/
ouputs(l);
// printf("请输入要查找的位置:");
// int n1;
// scanf("%d",&n1);
// printf("%d\n",find_data(n1,l));
// l=bull(l);
// printf("请输入要删除的位置:");
// int d;
// printf("请输入要删除的元素:");
// scanf("%d",&d);
// l=delete_by_pos(d,l);
// if(search_by_data(d,l)==-1)
// puts("没找到");
// else
// printf("在第%d个\n",search_by_data(d,l));
// l=free_sqace(l);
// Bubble(l);
int c;
printf("请输入插入位置元素:");
scanf("%d",&c);
int d;
printf("请输入要插入的元素:");
scanf("%d",&d);
l=insert_data_keke(c,l,d);
ouputs(l);
return 0;
}
head.h文件
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Node
{
datatype data;
struct Node *next;
}*Linklist;
Linklist change_data(int data,Linklist l,int e); //按元素修改
Linklist insert_data_keke(int data,Linklist l,int e); //按元素插入(往前插)
void selection_sort(Linklist l); //简单选择排序
void Bubble(Linklist l); //冒泡排序
Linklist free_sqace(Linklist l); //释放
Linklist rev_linklist(Linklist l); //逆置
Linklist delete_by_data(int e,Linklist l); //按元素删除
int search_by_data(int e,Linklist l); //按元素查找
Linklist delete_by_pos(int n,Linklist l);//任意位置删除
Linklist bull(Linklist l); //排序
int find_data(int n,Linklist l); //任意位置查找
Linklist amend_data(int n,Linklist l); //任意位置修改
Linklist insert_data(int n,Linklist l,int e); //按位置插入
int Linklist_len(Linklist l); //计算链表元素个数
Linklist delete_real(Linklist l); //尾删
Linklist insert_end(int e,Linklist l); //尾插1.0
Linklist delete_head(Linklist l); //头删
Linklist creat_node(); //申请节点空间
Linklist insert_head(datatype e,Linklist l); //头插
int ouputs(Linklist l); //输出
Linklist insert_tail(datatype e,Linklist rear); //尾插
#endif
test.c文件
#include "head.h"
Linklist creat_node() //申请节点空间
{
Linklist node=(Linklist)malloc(sizeof(struct Node));
if(NULL==node)
return NULL;
node->data=0;
node->next=NULL;
return node;
}
Linklist insert_head(datatype e,Linklist l) //头插
{
Linklist node=creat_node();
if(NULL==node)
return NULL;
node->data=e;
node->next=l;
l=node;
return l;
}
int ouputs(Linklist l) //输出
{
if(NULL==l)
{
return -1;
}
while(l!=NULL)
{
printf("%d ",l->data);
l=l->next;
}
printf("\n");
}
Linklist insert_tail(datatype e,Linklist rear) //尾插
{
Linklist s=creat_node();
if(NULL==s)
return NULL;
s->data=e;
if(rear!=NULL)
rear->next=s;
rear=s;
return rear;
}
Linklist insert_end(int e,Linklist l) //尾插1.0
{
Linklist s=creat_node();
s->data=e;
if(l==NULL)
{
l=s;
}
else
{
Linklist end=l;
while(end->next!=NULL)
{
end=end->next;
}
end->next=s;
}
return l;
}
Linklist delete_head(Linklist l) //头删
{
if(NULL==l)
return l;
if(l->next==NULL)
{
free(l);
l=NULL;
}
else
{
Linklist q=l->next;
l->data=q->data;
l->next=q->next;
free(q);
q=NULL;
}
return l;
}
Linklist delete_real(Linklist l) //尾删
{
if(NULL==l)
return NULL;
else if(l->next==NULL)
{
free(l);
l=NULL;
}
else
{
Linklist p=l;
while(p->next->next!=NULL)
{
p=p->next;
}
free(p->next);
p->next=NULL;
}
return l;
}
int Linklist_len(Linklist l) //计算链表元素个数
{
int count=0;
while(l!=NULL)
{
l=l->next;
count++;
}
return count;
}
Linklist insert_data(int n,Linklist l,int e) //按位置插入
{
//1.判断链表是否为空
//2.判断位置是否合法
int len=Linklist_len(l);
if(NULL==l||n<1||n>len+1)
{
puts("insert error\n");
exit(-1);
}
Linklist p=l;
if(n==len+1)
{
insert_end(e,l);
return l;
}
else
{
for(int i=1;i<n;i++)
{
p=p->next;
}
Linklist s=creat_node();
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return l;
}
}
Linklist amend_data(int n,Linklist l) //任意位置修改
{
int len=Linklist_len(l);
if(NULL==l||n<1||n>len)
{
printf("insert error\n");
exit(-1);
}
int i;
Linklist p=l;
for(i=1;i<n;i++)
{
p=p->next;
}
printf("please enter the modified data:");
int e;
scanf("%d",&e);
p->data=e;
return l;
}
int find_data(int n,Linklist l) //任意位置查找
{
int len=Linklist_len(l);
if(NULL==l||n<1||n>len)
{
printf("insert error\n");
exit(-1);
}
int i;
Linklist p=l;
for(i=1;i<n;i++)
{
p=p->next;
}
return p->data;
}
Linklist bull(Linklist l) //排序
{
int len=Linklist_len(l);
int arr[len];
int i,j,t;
Linklist p=l;
Linklist q=l;
for(i=0;i<len;i++)
{
arr[i]=p->data;
p=p->next;
}
for(i=1;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
t=arr[j];arr[j]=arr[j+1];arr[j+1]=t;
}
}
}
for(i=0;i<len;i++)
{
q->data=arr[i];
q=q->next;
}
return l;
}
Linklist delete_by_pos(int n,Linklist l) //按任意位置删除
{
if(NULL==l||n<1||n>Linklist_len(l))
{
exit(-1);
}
if(n==1)
{
delete_head(l);
}
else
{
Linklist p=l;
for(int i=1;i<n-1;i++)
{
p=p->next;
}
Linklist q=p->next;
p->next=q->next;
free(q);
q=NULL;
}
return l;
}
int search_by_data(int e,Linklist l) //按元素查找
{
if(NULL==l)
{
exit(-1);
}
int n=0;
while(l!=NULL)
{
n++;
if(l->data==e)
{
return n;
}
l=l->next;
}
return -1;
}
/*Linklist delete_by_data(int e,Linklist l) //按元素删除
{
if(search_by_data(e,l)==-1)
return l;
else
{
//int n=Linklist_len(l);
Linklist p=l;
while(p!=NULL)
{
for(int i=1;i<Linklist_len(l);i++)
{
if(p->data==e)
l=delete_by_pos(i,p);
p=l;
}
p=p->next;
}
}
return l;
}*/
Linklist rev_linklist(Linklist l) //逆置
{
if(NULL==l || l->next==NULL)
{
return l;
}
Linklist p=l->next;
int len=Linklist_len(l)-1;
l->next=NULL;
for(int i=0;i<len;i++)
{
Linklist t=p;
p=p->next;
t->next=l;
l=t;
}
return l;
}
Linklist free_sqace(Linklist l) //释放
{
if(NULL==l)
{
return l;
}
int len=Linklist_len(l);
for(int i=0;i<len;i++)
{
l=delete_head(l);
}
return l;
}
void Bubble(Linklist l) //冒泡排序
{
if(NULL==l || l->next==NULL)
{
return ;
}
int len=Linklist_len(l);
Linklist p;
for(int i=1;i<len;i++)
{
p=l;
for(int j=0;j<len-i;j++)
{
if(p->data > p->next->data)
{
int t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p=p->next;
}
}
}
void selection_sort(Linklist l) //简单选择排序
{
if(NULL==l || l->next==NULL)
{
return ;
}
int len=Linklist_len(l);
Linklist min=NULL;
Linklist p=l;
for(int i=0;i<len-1;i++)
{
min=p;
for(int j=i+1;j<len;j++)
{
if(min->data > min->next->data)
{
min=min->next;
}
}
if(min!=l)
{
int t=p->data;
p->data=min->data;
min->data=t;
}
p=p->next;
}
}
Linklist insert_data_keke(int data,Linklist l,int e) //按元素插入(往前插)
{
if(NULL==l)
return l;
Linklist p=l;
int count=0;
while(p!=NULL)
{
if(p->data==data)
count++;
p=p->next;
}
if(count==0)
{
puts("没有这个元素");
return l;
}
else
{
p=l;
/* Linklist s=creat_node();
while(p->data!=data)
{
p=p->next;
}
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
*/
Linklist q=NULL;
int count=0;
while(p!=NULL)
{
if(p->data==data)
{
count++;
}
p=p->next;
}
p=l;
for(int i=0;i<count;i++)
{
while(p!=NULL)
{
if(p->data==data)
{
Linklist s=creat_node();
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
q=s->next;
break;
}
p=p->next;
}
p=q;
}
return l;
}
}
Linklist change_data(int data,Linklist l,int e) //按元素修改
{
if(NULL==l)
return l;
Linklist p=l;
int count=0;
while(p!=NULL)
{
if(p->data==data)
count++;
p=p->next;
}
if(count==0)
{
puts("没有这个元素");
return l;
}
else
{
p=l;
while(p!=NULL)
{
if(p->data==data)
{
p->data=e;
}
p=p->next;
}
return l;
}
}