#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list *ptr;
}elem,*pelem;
typedef struct real
{
struct list* head;
unsigned size;
}list,*plist;
void initialize(plist mylist)//初始化
{
mylist->head=NULL;
mylist->size=0;
}
int creat(plist mylist1)//创建链表
{
int i;
pelem tmp=NULL;
while(scanf("%d",&i))
{
pelem p1=(pelem)malloc(sizeof(elem));
if(mylist1->head==NULL)
{
mylist1->head=p1;
p1->data=i;
mylist1->size++;
p1->ptr=NULL;
tmp=mylist1->head;
}
else
{
tmp->ptr=p1;
p1->data=i;
mylist1->size++;
p1->ptr=NULL;
tmp=tmp->ptr;
}
}
//printf("%d\n",p1->data);
return mylist1->size;
}
int display(plist mylist) //显示链表
{
pelem p1=mylist->head;
if(p1==NULL)
{
return -1;
}
else
{
while(p1!=NULL)
{
printf("%d\n",p1->data);
p1=p1->ptr;
}
//return p1->data;
}
return 0;
}
int insert(plist mylist,int num)//链表的插入操作
{
pelem p1=(pelem)malloc(sizeof(elem));
pelem tmp=mylist->head;
p1->data=111;
p1->ptr=NULL;
mylist->size++;
if(num==0)
{
p1->ptr=tmp;
mylist->head=p1;
}
else
{
while(num-1)
{
tmp=tmp->ptr;
num--;
}
p1->ptr=tmp->ptr;
tmp->ptr=p1;
}
return 0;
}
void remov(plist mylist,int value)//链表的删除
{
pelem tmp=mylist->head;
pelem tmp2=tmp->ptr;
if(tmp->data==value)
{
mylist->head=tmp->ptr;
free(tmp);
}
else
{
while(tmp2->data!=value&&tmp2!=NULL)
{
tmp2=tmp2->ptr;
tmp=tmp->ptr;
}
tmp->ptr=tmp2->ptr;
free(tmp2);
}
}
void modify(plist mylist,int num)//链表的更改
{
pelem p1=mylist->head;
while(num-1)
{
p1=p1->ptr;
num--;
}
p1->data=11;
}
void distroy(plist mylist)//链表的销毁
{
//pelem p1=mylist->head;
pelem tmp=mylist->head;
int i=0;
while(i<mylist->size)
{
tmp=tmp->ptr;
free(mylist->head);
mylist->head=tmp;
i++;
}
}
void insertsort(plist mylist)//链表的插入排序
{
pelem ptr1 = mylist->head->ptr;
mylist->head->ptr = NULL;
pelem tmp1 = ptr1->ptr;
ptr1->ptr = NULL;
pelem ptr2 = mylist->head;
while(ptr1)
{
if(ptr1->data <= ptr2->data)
{
mylist->head = ptr1;
ptr1->ptr = ptr2;
}
else if(ptr2->data <= ptr1->data && ptr2->ptr == NULL)
{
ptr2->ptr = ptr1;
ptr1->ptr = NULL;
}
else if(ptr2->data < ptr1->data && ptr2->ptr->data > ptr1->data)
{
ptr1->ptr = ptr2->ptr;
ptr2->ptr = ptr1;
}
else if(ptr2->data < ptr1->data && ptr2->ptr->data < ptr1->data)
{
ptr2 = ptr2->ptr;
continue;
}
ptr1 = tmp1;
if (tmp1 != NULL)
{
tmp1 = tmp1->ptr;
}
ptr2 = mylist->head;
}
}
int main(void) {
list m1;
initialize(&m1);
//initialize(&m2);
printf("%d\n",creat(&m1));
//display(&m1);
//getchar();
//printf("%d\n",creat(&m2));
//display(&m2);
//remov(&ml,3);
// distroy(&ml);
//modify(&ml,3);
insertsort(&m1);
display(&m1);
return EXIT_SUCCESS;
}