#ifndef __1_H__
#define __1_H__
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct Node
{
union
{
int len;
datatype data;
};
struct Node *next;
}*linklist;
linklist create(int flag);
int insert_head(linklist L, datatype e);
void output(linklist L);
void output2(linklist L);
int insert_tail(linklist L,datatype e);
int delete_tail(linklist L);
int delete_head(linklist L);
int insert_pos(linklist L,int pos,datatype e);
int delete_pos(linklist L,int pos);
int search_pos(linklist L,int pos);
int change_pos(linklist L,int pos,datatype e);
void revese(linklist L);
int insert_data(linklist L,datatype e,datatype tmp);
void free_L(linklist L);
void sort(linklist L);
#endif
#include"1.h"
int main(int argc, const char *argv[])
{
linklist L = create(1);
int n;
datatype e;
printf("input insert_head number\n");
scanf("%d",&n);
for(int i = 0; i < n; i ++)
{
printf("input insert_head data\n");
scanf("%d",&e);
insert_head(L,e);
}
output(L);
#if 0
printf("input insert_tail number\n");
scanf("%d",&n);
printf("input insert_tail data\n");
scanf("%d",&e);
insert_tail(L,e);
printf("after insert_tail\n");
output(L);
delete_head(L);
printf("after delete_head\n");
output(L);
delete_tail(L);
printf("after delete_tail\n");
output(L);
printf("input insert_pos number\n");
scanf("%d",&n);
printf("input insert_pos data\n");
scanf("%d",&e);
insert_pos(L,n,e);
output(L);
printf("input delete_pos number\n");
scanf("%d",&n);
delete_pos(L,n);
output(L);
printf("input search_pos number\n");
scanf("%d",&n);
search_pos(L,n);
printf("input change_pos number\n");
scanf("%d",&n);
printf("input change_pos data\n");
scanf("%d",&e);
change_pos(L,n,e);
output(L);
revese(L);
output(L);
printf("input insert_data data\n");
scanf("%d",&e);
datatype tmp;
printf("input want insert_data data\n");
scanf("%d",&tmp);
insert_data(L,e,tmp);
output(L);
#else
sort(L);
output(L);
free(L);
return 0;
#endif
}
#include "1.h"
linklist create(int flag)
{
linklist L = (linklist)malloc(sizeof(struct Node));
if(!L) return NULL;
if(flag = 1)
{
L->len = 0;
}
else if(flag == 0)
{
L->data = 0;
}
L->next = NULL;
return L;
}
int insert_head(linklist L, datatype e)
{
if(!L)
{
printf("insert_head failed");
return -1;
}
linklist s = create(0);
if(!s) return -1;
s->data = e;
s->next = L->next;
L->next = s;
L->len++;
}
void output(linklist L)
{
if(!L || L->len == 0)
printf("output failed");
linklist p = L;
for(int i = 0; i < L->len; i++)
{
p = p->next;
printf("%d\t",p->data);
}
putchar(10);
}
void output2(linklist L)
{
if(!L || L->len == 0)
printf("output2 failed");
linklist p = L;
while(p->next)
{
p = p->next;
printf("%d\t",p->data);
}
putchar(10);
}
int insert_tail(linklist L,datatype e)
{
if(!L) return -1;
linklist p = L;
linklist s = create(0);
while(p->next)
p = p->next;
if(!s) return -1;
s->data = e;
p->next = s;
L->len++;
}
int delete_head(linklist L)
{
if(!L || L->len == 0)
{
printf("delete_head failed");
return -1;
}
linklist p = L->next;
L->next = p->next;
free(p);
p = NULL;
L->len --;
return 0;
}
int delete_tail(linklist L)
{
if(!L || L->len == 0)
{
printf("delete_tail failed");
return -1;
}
linklist p = L;
while(p->next->next)
p = p->next;
linklist q = p->next;
p->next = q->next;
free(q);
q = NULL;
L->len --;
return 0;
}
int insert_pos(linklist L,int pos,datatype e)
{
if(!L || pos<1 || pos >= L->len)
{
printf("insert_pos failed");
return -1;
}
linklist p = L;
for(int i = 0 ; i< pos-1; i++)
p = p -> next;
linklist s = create(0);
if(!s) return -1;
s->data = e;
s->next = p->next;
p->next = s;
L->len++;
return 0;
}
int delete_pos(linklist L,int pos)
{
if(!L|| pos < 1 || pos>= L->len)
{
printf("delete_pos failed\n");
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 --;
return 0;
}
int search_pos(linklist L,int pos)
{
if(!L|| L->len == 0 || pos < 1 || pos> L->len)
{
printf("delete_pos failed\n");
return -1;
}
linklist p = L;
for(int i = 0; i < pos; i++)
p = p->next;
printf("the %d num = %d\n",pos,p->data);
return 0;
}
int change_pos(linklist L,int pos,datatype e)
{
if(!L|| L->len == 0 || pos < 1 || pos> L->len)
{
printf("delete_pos failed\n");
return -1;
}
linklist p = L;
for(int i = 0; i < pos; i++)
p = p->next;
p->data = e;
return 0;
}
int search_data(linklist L,datatype e)
{
if(!L || L->len == 0)
{
printf("search_data failed\n");
return -1;
}
linklist p = L;
int pos = 1;
while(p->next)
{
p = p->next;
if(p->data == e)
return pos;
pos++;
}
return -1;
}
int insert_data(linklist L,datatype e,datatype tmp)
{
if(!L || !L->next)
{
printf("insert_data failed\n");
return -1;
}
int pos = search_data(L,e);
if(!pos) return -1;
insert_pos(L,pos,tmp);
return 0;
}
void revese(linklist L)
{
if(!L || !L->next)
return;
if(L->len == 1)
{
printf("only one num\n");
return;
}
linklist p = L->next;
L->next = NULL;
while(p)
{
linklist t = p;
p = p->next;
t->next = L->next;
L->next = t;
}
}
void sort(linklist L)
{
if(!L || !L->next)
return;
linklist p = L->next;
L->next = NULL;
while(p)
{
linklist t = p;
p = p->next;
linklist q = L;
while(q->next && q->next->data < t->data)
q = q->next;
t->next = q->next;
q->next = t;
}
}