您的位置:首页 > 理论基础 > 数据结构算法

数据结构单链表的相关操作(linux下实现)C语言

2017-07-27 21:01 387 查看
数据结构单链表相关操作:

   1.linklist.h文件下代码

      #ifndef __LINKLIST_H__

#define __LINKLIST_H__

#include<stdio.h>

#include<stdlib.h>

typedef int datatype;

typedef struct node

{

    datatype data;

    struct node *next;

}listnode,*linklist;

extern linklist list_create();

extern linklist list_create2();

extern void list_show(linklist H);

extern linklist list_get(linklist H,int pos);

extern linklist list_locate(linklist H,datatype value);

extern int list_head_insert(linklist H,datatype value);

extern int list_delete(linklist H,int pos);

extern void list_reverse(linklist H);

extern int list_order_insert(linklist H,datatype value);

extern int list_insert(linklist H,int pos,datatype value);

extern void list_sort(linklist H);

#endif

  2.linklist.c函数实现

#include"linklist.h"

linklist list_create()

{

    linklist H;

    if((H = (linklist)malloc(sizeof(listnode))) == NULL)

    {

         printf("malloc failedd!\n");

         return H;

    }

    H->data =0;

    H->next = NULL;

    return H;

}

linklist list_create2()

{

    linklist H,r,p; //r指向表尾

    datatype value;

    if((H = (linklist)malloc(sizeof(listnode))) == NULL)

    {

         printf("malloc failedd!\n");

         return H;

    }

    H->data =0;

    H->next = NULL;

    r = H;

    while(1)

    {

        printf("input word(# exit):");

        scanf("%d",&value);

        getchar();

        if(value == -1)

            break;

        if((p = (linklist)malloc(sizeof(listnode))) == NULL)

        {

             printf("malloc failedd!\n");

             return H;

        }

        p->data = value;

        p->next = NULL;

        r->next = p;

        r = p;

    }

    return H;

}

void list_show(linklist H)

{

    while(H->next)

    {

        printf("%d ",H->next->data);

        H = H->next;

    }

    printf("\n");

}

int list_head_insert(linklist H,datatype value)

{

    linklist p;

    if((p = (linklist)malloc(sizeof(listnode)))==NULL )

    {

        printf("malloc failed\n");

        return -1;

    }

    p->data = value;

    p->next = H->next;

    H->next = p;

    return 0;

}

 linklist list_get(linklist H,int pos)

 {

     linklist p = H;

     int i = -1;

     if (pos < 0)

    {

        printf("position is invalib:<)\n");

        return NULL;

    }

    while(p ->next &&i < pos)

    {

        p = p->next;

        i++;

    }

    if(i == pos)

    {

        return p;

    }

    else

    {

        printf("position is invalib:<)\n");

        return NULL;

    }

 }

linklist list_locate(linklist H,datatype value)

{

    linklist p = H->next;

    while(p && p->data !=value)

    {

        p = p->next;

    }

    return p;

}

int list_insert(linklist H,int pos,datatype value)

{

    linklist p,q;

    if(pos == 0)

    {

        p = H;

    }

    else

    {

        p = list_get(H,pos-1);

    }

    if(p == NULL)

    {

        printf("para is invalid\n");

        return -1;

    }

    else

    {

        if((q = (linklist)malloc(sizeof(listnode)))==NULL)

        {

            printf("melloc failed\n");

            return -1;

        }

        q->data = value;

        q->next = p->next;

        p->next = q;

        return 0;

    }

}

int list_delete(linklist H,int pos)

{

    linklist p,q;

    if(pos == 0)

    {

        p =H;

    }

    else

    {

        p = list_get(H,pos - 1);

    }

    if(p == NULL || p->next == NULL)

    {

        printf("para is invalid\n");

        return -1;

    }

    else

    {

        q = p->next;

        p->next = q->next;

        free(q);

        q = NULL;

        return 0;

    }

}

 void 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;

    }

 }

int list_order_insert(linklist H,datatype value)

{

    linklist p,q;

    if((p = (linklist)malloc(sizeof(listnode))) ==NULL)

    {

        printf("malloc failed\n");

        return -1;

    }

    p ->data = value;

    q = H;

    while(q->next && q->next->data <value)

    {

        q = q->next;

    }

    p->next = q->next;

    q->next = p;

    return 0;

}

void list_sort(linklist H)

{

    linklist p,q,r;

    p = H->next;

    H->next = NULL;

    while(p)

    {

        q = p;

        p = p->next;

        r = H;

        while(r ->next && r->next->data < q->data)

        {

            r = r->next;

        }

        q ->next = r->next;

        r->next = q;

    }

}

3.makefile文件代码:

   CFLAGS=-c -Wall -g           

test:linklist.o test.o

.PHONY:clean

clean:

        rm *.o test

                             

                             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息