单链表

来源:互联网 发布:python开发应用 编辑:程序博客网 时间:2024/06/10 02:15

/******main测试函数********/
#include <stdio.h>
#include <strings.h>
#include "linklist.h"


int main()
{
    int a[] = {9, 6, 3};
    linklist H;
    int i;


    H = list_create();


    for (i = 0; i < sizeof(a)/sizeof(int); i++)
        list_insert(H, a[i], 0);
    
    list_show(H);
    list_insert(H, 10, 6); 
    list_show(H);
    list_delete(H, 5);
    list_show(H);


    list_order_insert(H, 70);
    list_show(H);
    list_reverse(H);
    list_show(H);


    return 0;
}
/******linklise.c********/
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include "linklist.h"


linklist list_create()
{
    linklist H;


    H = (linklist)malloc(sizeof(listnode));
    if (H == NULL)
    {
        printf("malloc error\n");
        return H;
    }
    H->data = 0;
    H->next = NULL;//0x0
    return H;
}
int list_insert(linklist H, datatype x, int pos)
{
    linklist p = H, q;


    while (pos)
    {   
        p = p->next;
        if (p == NULL)
        {
            printf("insert position is invalid\n");
            return -1;
        }
        pos--;
    }
    q = (linklist)malloc(sizeof(listnode));
    if (q == NULL)
    {
        printf("malloc error\n");
        return -1;
    }
    q->data = x;
    q->next = p->next;
    p->next = q;
    return 0;
}
int list_order_insert(linklist H, datatype x)
{
    linklist p = H, q;
    while (p->next != NULL && p->next->data < x)
        p = p->next;




    q = (linklist)malloc(sizeof(listnode));
    if (q == NULL)
    {
        printf("malloc error\n");
        return -1;
    }
    q->data = x;
    q->next = p->next;
    p->next = q;
    return 0;
}
int list_delete(linklist H, int pos)
{
    linklist p = H, q;


    while (pos)
    {   
        p = p->next;
        if (p == NULL)
        {
            printf("delete position is invalid\n");
            return -1;
        }
        pos--;
    }
    if (p->next == NULL)
    {
        printf("delete position is invalid\n");
        return -1;
    }
    q = p->next;
    p->next = q->next;
    free(q);
    q = NULL;
    return 0;
}
int list_reverse(linklist H)
{
    linklist p, q;
    p = H->next;
    H->next = NULL;
    while (p != NULL)
    {
        q = p;
        p = p->next;
        q->next = H->next;
        H->next = q;
    }
    return 0;
}
int list_show(linklist H)
{
    linklist p = H->next;
    while (p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
    return 0;
}


/******linklist.h********/
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
typedef int datatype;
typedef struct node
{
    datatype data;
    struct node *next;
}listnode, *linklist;
//typedef struct node  listnode;
//typedef struct node *   linklist;
linklist list_create();
int list_insert(linklist H, datatype x, int pos);
int list_order_insert(linklist H, datatype x);
int list_delete(linklist H, int pos);
int list_reverse(linklist H);
int list_show(linklist H);
#endif

原创粉丝点击