单链表的基本操作

来源:互联网 发布:众筹平台数据统计 编辑:程序博客网 时间:2024/05/14 08:32
/**    单链表的基本操作*/#include<stdio.h>#include<malloc.h>typedef int DataType;typedef struct node{    DataType data; struct node *next;} node, *LinkList;/**    创建空表:*/void Init_List(LinkList *L){    *L=(LinkList)malloc(sizeof(node));    (*L)->next=NULL;}/**    头插法:*/void InPut_FromHead_List(LinkList L){    node *s;    scanf("%d",&L->data);    int i;    for(i=0; i<L->data; i++)    {        s=(LinkList)malloc(sizeof(node));        scanf("%d",&s->data);        s->next=L->next;        L->next=s;    }}/**    尾插法:*/void InPut_FromTail_List(LinkList L){    node *s,*r=L;    scanf("%d",&L->data);    int i;    for(i=0; i<L->data; i++)    {        s=(node*)malloc(sizeof(node));        scanf("%d",&s->data);        r->next=s;        r=s;    }    r->next=NULL;}/**    输出:*/void OutPut_List(LinkList L){    node* q=L->next;    while(q!=NULL)    {        printf("%d ",q->data);        q=q->next;    }    putchar('\n');}/**    递归输入单链表:心情不错用递归写着玩,                    写的不好不要喷啊。。*/LinkList Input(int n){    LinkList L=(LinkList)malloc(sizeof(node));    scanf("%d",&L->data);    if(n<=1) L->next=NULL;    else L->next=Input(n-1);    return  L;}LinkList Create_List(){    LinkList L=(LinkList)malloc(sizeof(node));    scanf("%d",&L->data);    if(L->data) L->next=Input(L->data);    else L->next=NULL;    return L;}/**    递归 逆序输出单链表:         怎么 正序输出 呢? 我知道但我不告诉你。*/void PostPrint_List(LinkList L){    L=L->next;    if(L==NULL) return ;    PostPrint_List(L);    printf("%d ",L->data);}/**    非递减 排序:*/void  Sort_List(LinkList L){    node *p,*q;    DataType temp;    for(p=L->next; p!=NULL; p=p->next)    {        for(q=p->next; q!=NULL; q=q->next)        {            if(q->data < p->data)            {                temp=q->data;                q->data=p->data;                p->data=temp;            }        }    }}/**    判断是否为空:*/int IsEmpty_List(LinkList L){    return (L->next==NULL);}/**    查找:*/node* FindNode_List(LinkList L,DataType key){    node* q=L->next;    while(q!=NULL)    {        if(q->data==key)            return q;        q=q->next;    }    return NULL;}/**    删除:*/void Delete_List(LinkList L,int index){    node *s=L,*r;    int i=0;    while(s!=NULL&&i<index-1)    {        s=s->next;        i++;    }    r=s->next;    s->next=(s->next)->next;    free(r);}/**    增加:*/void Insert_List(LinkList L,int index,DataType key){    node *s=L,*new_s;    int i=0;    while(s!=NULL&&i<index-1)    {        s=s->next;        i++;    }    new_s=(node*)malloc(sizeof(node));    new_s->data=key;    new_s->next=s->next;    s->next=new_s;}int main(){  //  freopen("A.in","r",stdin);    // 测试数据 5 3 2 4 1 6//    node *q;//    Init_List(&q);  //  attention !!!!////    InPut_FromTail_List(q);//    // InPut_FromHead_List(q);    LinkList q=Create_List();    OutPut_List(q);    Sort_List(q);    OutPut_List(q);    PostPrint_List(q);    return 0;} 


 

原创粉丝点击