#include "list.h"
int main(int argc, const char *argv[])
{
Plink L = get_head();
int i,a[10] = {10,20,30,40,50,60,70,80,90,95};
/*for(i=0;i<10;i++)
{
head_insert(L,a[i]);
}*/
for(i=0;i<10;i++)
{
tail_insert(L,a[i]);
}
node_output(L);
// insert_any_pos(L,4,100);
// node_output(L);
// head_dele(L);
// node_output(L);
// tail_dele(L);
// node_output(L);
// pos_dele(L,6);
// node_output(L);
// find_change_value(L,100);
// node_output(L);
// find_change_pos(L,4);
// node_output(L);
simple_sort(L);
node_output(L);
return 0;
}
#include "list.h"
int i,j;
Plink get_head()
{
Plink p = malloc(sizeof(Link));
if(p==NULL)
{
printf("申请头结点失败\n");
return NULL;
}
p->len=0;
p->next = NULL;
return p;
}
int empty(Plink L)
{
if(L==NULL)
{
return -1;
}
return 0;
}
int head_insert(Plink L,int e)
{
if(empty(L))
{
printf("单链表不存在或为空\n");
return -1;
}
Plink p = malloc(sizeof(Link));
p->data = e;
p->next = L->next;
L->next = p;
L->len++;
}
int node_output(Plink L)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t=L;
for(i=0;i<L->len;i++)
{
t = t->next;
printf("%d\n",t->data);
}
putchar(10);
return 0;
}
int tail_insert(Plink L,int e)
{
if(empty(L))
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t = L;
for(i=0;i<L->len;i++)
{
t=t->next;
}
Plink p = malloc(sizeof(Link));
p->data = e;
t->next = p;
p->next = NULL;
L->len++;
return 0;
}
int insert_any_pos(Plink L,int pos,int e)
{
if(empty(L))
{
printf("插入失败\n");
return -1;
}
Plink t = L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p = malloc(sizeof(Link));
p->data = e;
p->next = t->next;
t->next = p;
L->len++;
}
int head_dele(Plink L)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t=L->next;
L->next=t->next;
L->len--;
return 0;
}int tail_dele(Plink L)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t = L;
for(i=0;i<L->len-1;i++)
{
t=t->next;
}
Plink Q= t->next;
t->next = NULL;
L->len--;
free(Q);
Q=NULL;
return 0;
}
int pos_dele(Plink L,int pos)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q = t->next;
t->next=t->next->next;
L->len--;
free(Q);
Q=NULL;
return 0;
}
int find_change_value(Plink L,int val)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t=L;
int e,pos=-1;
for(i=0;i<L->len;i++)
{
t=t->next;
if(val==t->data)
{
pos=i+1;
printf("请输入修改后的值:\n");
scanf("%d",&e);
t->data = e;
break;
}
}
if(pos==-1)
{
printf("不存在该节点\n");
return -1;
}
return 0;
}
int find_change_pos(Plink L,int pos)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink t=L;
int e;
for(i=0;i<pos;i++)
{
t=t->next;
}
printf("请输入修改后的值:\n");
scanf("%d",&e);
t->data=e;
printf("修改成功\n");
return 0;
}
int node_reverse(Plink L)
{
if(empty(L)||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
Plink Q=L->next->next;
Plink t=L->next;
while(Q!=NULL)
{
t->next = Q->next;//防止丢失
Q->next = L->next;
L->next = Q;
Q = t->next;
}
}
int simple_sort(Plink L)
{
Plink m,n,min;
int t;
for(m=L->next;m->next!=NULL;m=m->next)
{
min=m;
for(m=n->next;n!=NULL;n=n->next)
{
min=n;
}
if(m!=min)
{
t = m->data;
m->data=min->data;
min->data=t;
}
}
}
int node_destroy(Plink L)
{
if(L==NULL)
{
printf("销毁失败!\n");
return -1;
}
Plink t = L;
while(t!=NULL)
{
t = t->next;
free(L);
L=t;
}
printf("销毁成功\n");
}
#ifndef _LIST_H_
#define _LIST_H_
#include <myhead.h>
typedef struct node
{
union{
int len;
int data;
};
struct node *next;
}Link,*Plink;
Plink get_head();
int head_insert(Plink L,int e);
int node_output(Plink L);
int tail_insert(Plink L,int e);
int empty(Plink L);
int insert_any_pos(Plink L,int pos,int e);
int head_dele(Plink L);
int tail_dele(Plink L);
int pos_dele(Plink L,int pos);
int find_change_value(Plink L,int val);
int find_change_pos(Plink L,int pos);
int simple_sort(Plink L);
int node_reverse(Plink L);
#endif