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

25 篇文章 2 订阅
22 篇文章 0 订阅

数据结构单链表相关操作:

   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
                             
                             



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值