ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性表(C语言实现)

2022-09-15 20:30:56  阅读:195  来源: 互联网

标签:index ListNode 线性表 实现 elemtype C语言 int next pointer


线性表

顺序存储结构

# include "stdlib.h"

# define LIST_INIT_SIZE 100
# define LIST_INCREMENT 10

typedef int elemtype;
typedef struct
{
    elemtype *elem;
    int length;
    int list_size;
} SqList;

// Create a linear table
int createList(SqList *l)
{
    l->elem = (elemtype *) malloc(LIST_INIT_SIZE * sizeof(elemtype));
    if(!l->elem)
    {
        return -1;
    }
    l->length = 0;
    l->list_size = LIST_INIT_SIZE;

    return 0;
}

// Locate an element
int locateElem(SqList *l, elemtype e)
{
    int index = 0;
    for (int i = 0; i < l->length; ++i)
    {
        if (l->elem[i] == e)
        {
            index = i;
        }
    }

    return index;
}

// Insert a element
int insertElem(SqList *l, int index, elemtype e)
{
    if (index < 1 || index > l->length + 1)
    {
        return -1;
    }
    if (l->length > l->list_size)
    {
        elemtype *new = (elemtype *) realloc(l->elem, (l->list_size + LIST_INCREMENT) * sizeof(elemtype));
        l->elem = new;
        l->list_size += LIST_INCREMENT;
    }

    elemtype *p;
    for (p = &(l->elem[l->length - 1]); p >= &(l->elem[index - 1]); --p)
    {
        *(p + 1) = *p;
    }
    l->elem[index - 1] = e;
    ++l->length;

    return 0;
}

// Delete an element
elemtype deleteElem(SqList *l, int index)
{
    if (index < 1 || index > l->length)
    {
        return -1;
    }

    elemtype e = l->elem[index - 1];
    for (elemtype *p = &l->elem[index - 1]; p < l->elem + l->length; ++p)
    {
        *(p) = *(p + 1);
    }
    --l->length;

    return e;
}


链式存储结构

# include "stdio.h"
# include "stdlib.h"

typedef int elemtype;

typedef struct ListNode
{
    elemtype data;
    struct ListNode *next;
} ListNode;

// The head interpolation
ListNode *createListHead(int length)
{
    ListNode *head = (ListNode *) malloc(sizeof(ListNode));
    head->next = NULL;
    for (int i = 0; i < length; ++i)
    {
        ListNode *curr = (ListNode *) malloc(sizeof(ListNode));
        scanf("%d", &curr->data);
        curr->next = head->next;
        head->next = curr;
    }

    return head;
}

// The tail interpolation
ListNode *createListTail(int length)
{
    ListNode *head = (ListNode *) malloc(sizeof(ListNode));
    head->next = NULL;
    ListNode *pointer = head;
    for (int i = 0; i < length; ++i)
    {
        ListNode *curr = (ListNode *) malloc(sizeof(ListNode));
        scanf("%d", &curr->data);
        pointer->next = curr;
        pointer = curr;
    }

    return head;
}

// fine an element
elemtype findElem(ListNode *l, int i)
{
    ListNode *head = l;
    ListNode *pointer = head;
    int index = 0;
    while (pointer->next != NULL && index != i)
    {
        pointer = pointer->next;
        ++index;
    }
    return pointer->data;
}

// Insert an element
int insertElem(ListNode *l, int i, elemtype e)
{
    ListNode *pointer = l;
    int index = 0;
    while (pointer != NULL && index != i - 1)
    {
        pointer = pointer->next;
        ++index;
    }
    ListNode *new = (ListNode *) malloc(sizeof(ListNode));
    new->data = e;
    new->next = pointer->next;
    pointer->next = new;

    return 0;
}

// Delete an element
elemtype deleteElem(ListNode *l, int i)
{
    ListNode *pointer = l;
    int index = 0;
    while (pointer != NULL && index != i - 1)
    {
        pointer = pointer->next;
        ++index;
    }
    elemtype e = pointer->next->data;
    pointer->next = pointer->next->next;

    return e;
}

标签:index,ListNode,线性表,实现,elemtype,C语言,int,next,pointer
来源: https://www.cnblogs.com/euler0525/p/16697862.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有