单向链表
创建、头插、尾插、头删、尾删、输出、任意位置插入、任意位置删除、任意位置修改、任意位置查找、按元素删除、按元素插入、按元素修改、冒泡、简单选择、逆置、循环、释放空间
mian.c
#include"head.h"
int main(int argc, const char *argv[])
{
Linklist L=NULL;
int n,m;
datatype e;
printf("please enter n:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("pilease enter e");
scanf("%d",&e);
L=insert_head(e,L);
}
printf("weichageshu m:");
scanf("%d",&m);
for(int i=0;i<m;i++){
printf("pilease enter e");
scanf("%d",&e);
L=insert_rear(e,L);
}
L=delete_head(L);
output(L);
int pos;
L=delete_rear(L);
printf("输入要插入的位置:");
scanf("%d",&pos);
printf("输入要插入的值:");
scanf("%d",&e);
L=insert_by_pos(pos,e,L);
output(L);
printf("输入要修改的位置:");
scanf("%d",&pos);
printf("输入要修改的值:");
scanf("%d",&e);
L=apdate_by_pos(pos,e,L);
output(L);
printf("输入要查找的位置:");
scanf("%d",&pos);
datatype o=chazhao(pos,L);
printf("%d",o);*/
printf("输入要删除的位置:");
scanf("%d",&pos);
L=delete_by_pos(pos,L);
output(L);
datatype key;
printf("输入要查找的元素:");
scanf("%d",&key);
int weizhi=search_pos(key,L);
if(weizhi==-1)
printf("找不到\n");
else
printf("位置是%d\n",weizhi);
printf("输入要删除的元素:");
scanf("%d",&key);
L=delete_by_data(key,L);
output(L);
L=nizhi(L);
output(L);
L=free_space(L);
output(L);
Bubble(L);
jiandanxuanze(L);
datatype key;
printf("输入要插入的位置元素:");
scanf("%d",&key);
printf("输入要插入的值");
scanf("%d",&e);
L=insert_yuansu(key,e,L);
printf("输入要修改的位置元素:");
scanf("%d",&key);
printf("输入要修改的值");
scanf("%d",&e);
L=apdate_yuansu(key,e,L);
output(L);
return 0;
}
test.c
#include"head.h"
Linklist create_node(){
Linklist node=(Linklist)malloc(sizeof(struct Node));
if(node==NULL)
return NULL;
node->data=0;
node->next=NULL;
return node;
}
Linklist insert_head(datatype e,Linklist L){
Linklist node=create_node();
node->data=e;
node->next=L;
L=node;
return L;
}
int output(Linklist L){
if(L==NULL)
return -1;
while(L!=NULL){
printf("%d ",L->data);
L=L->next;
}
return 0;
}
Linklist insert_rear(datatype e,Linklist L){
Linklist s=create_node();
s->data=e;
if(L==NULL)
L=s;
else{
Linklist rear=L;
while(rear->next!=NULL)
rear=rear->next;
rear->next=s;}
return L;
}
Linklist delete_head(Linklist L){
if(L==NULL)
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_rear(Linklist L){
if(NULL==L)
return L;
else if(L->next==NULL)
{
free(L);
L=NULL;
}
else{
Linklist second=L;
while(second->next->next!=NULL)
{
second=second->next;
}
free(second->next);
second->next=NULL;
return L;
}}
int len_linklist(Linklist L){
int count=0;
while(L!=NULL){
L=L->next;
count++;}
return count;
}
Linklist insert_by_pos(int pos,datatype e,Linklist L){
int len=len_linklist(L);
if(NULL==L||pos<1||pos>len+1){
puts("error");
return L;
}
Linklist p=L;
if(pos==len+1){
insert_rear(e,L);
return L;
}
for(int i=1;i<pos;i++){
p=p->next;
}
Linklist s=create_node();
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return L;
}
Linklist apdate_by_pos(int pos,datatype e,Linklist L){
int len=len_linklist(L);
if(NULL==L||pos<1||pos>len){
puts("erro");
return L;
}
Linklist p=L;
for(int i=1;i<pos;i++){
p=p->next;
}
p->data=e;
return L;
}
datatype chazhao(int pos,Linklist L){
int len=len_linklist(L);
if(NULL==L||pos<1||pos>len){
puts("erro");
return -1;
}
Linklist p=L;
for(int i=1;i<pos;i++){
p=p->next;
}
return p->data;
}
Linklist delete_by_pos(int pos,Linklist L){
if(NULL==L||pos<1||pos>len_linklist(L)){
puts("erro");
return L;
}
if(pos==1){
L=delete_head(L);
}
else{
Linklist p=L;
for(int i=1;i<pos-1;i++){
p=p->next;
}
Linklist q=p->next;
p->next=q->next;
free(q);
q=NULL;
}
return L;
}
int search_pos(datatype key,Linklist L){
if(NULL==L)
return -1;
int pos=0;
while(L!=NULL){
pos++;
if(L->data==key)
return pos;
L=L->next;
}
return -1;
}
Linklist delete_by_data(datatype key,Linklist L){
int pos=search_pos(key,L);
if(pos==-1)
return L;
L=delete_by_pos(pos,L);
return L;
}
Linklist nizhi(Linklist L){
if(NULL==L||L->next==NULL)
return L;
Linklist p=L->next;
int len=len_linklist(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_space(Linklist L){
if(NULL==L)
return NULL;
int len=len_linklist(L);
for(int i=0;i<len;i++){
L=delete_head(L);
}
return L;
}
void Bubble(Linklist L){
if(L==NULL||L->next==NULL)
return ;
int len=len_linklist(L);
Linklist p;
int j;
for(int i=1;i<len;i++){
for(j=0,p=L;j<len-i-1;j++,p=p->next){
if(p->data>p->next->data){
datatype t=p->data;
p->data=p->next->data;
p->next->data=t;
}
}
}
}
void jiandanxuanze(Linklist L){
if(L==NULL||L->next==NULL)
return ;
int len=len_linklist(L);
Linklist p,k;
int j;
for(int i=1;i<len;i++,L=L->next){
k=L;
for(j=i,p=L->next;j<len;j++,p=p->next){
if(k->data>p->data)
k=p;}
if(k->data!=L->data){
datatype t=L->data;
L->data=k->data;
k->data=t;}
}
}
Linklist insert_yuansu(datatype key,datatype e,Linklist L){
if(L==NULL)
return L;
int pos=search_pos(key,L);
L=insert_by_pos(pos,e,L);
return L;
}
Linklist apdate_yuansu(datatype key,datatype e,Linklist L){
if(L==NULL)
return L;
int pos=search_pos(key,L);
L=apdate_by_pos(pos,e,L);
return L;
}
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 create_node();
Linklist insert_head();
int output();
Linklist insert_rear();
Linklist delete_head();
Linklist delete_rear();
Linklist insert_by_pos();
Linklist apdate_by_pos();
datatype chazhao();
Linklist delete_by_pos();
int search_pos();
Linklist delete_by_data();
Linklist nizhi();
Linklist free_space();
void Bubble();
void jiandanxuanze();
Linklist insert_yuansu();
Linklist apdate_yuansu();
#endif