线性表的链式表示和实现

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。(这些存储单元可以是连续的,也可以是不连续的)

下面直接看实现代码,代码只实现了创建,插入和删除:

//
//  main.c
//  001-线性表的链式表示和实现
//


#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;

//线性表的单链表存储结构
typedef struct LNode{
    ElemType data;
    struct LNode * next;
}LNode, *LinkList;
int createList(LinkList * L, ElemType * elems, int length){
    *L = (LinkList)malloc(sizeof(LNode));
    (*L)->next = NULL;
    for (int i = 0; i < length; i++) {
        LinkList p = (LinkList)malloc(sizeof(LNode));
        p->next = (*L)->next;
        (*L)->next = p; //每个元素都插入到表头
        p->data = elems[i];
    }
    return 1;
}
int insertList(LinkList * L, ElemType elem, int i){
    //在带头结点的单链线性表L中第i个位置之前插入元素elem
    LinkList p = * L;
    int j = 0;
    while (p && j < i-1) { //不能在头结点之前插入,故i>1
        p = p->next;
        j++;
    }
    if (!p || j > i-1) {  //此时到了链表末尾
        return 0;
    }
    LinkList s = (LinkList)malloc(sizeof(LNode));
    s->data = elem;
    s->next = p->next;
    p->next = s;
    return 1;
}

//删除第i个元素
int deleteList(LinkList * L, int i, ElemType * elem){
    LinkList p = *L;
    int j = 0;
    while (p && j < i-1) { //寻找第i个节点,令p只想其前驱
        p = p->next;
        j++;
    }
    if (!(p->next) || j > i-1) {
        return 0;
    }
    LinkList q = p->next; //q就是需要删除的结点
    p->next = q->next;
    *elem = q->data;
    free(q);
    return 1;
}


int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    ElemType elems[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
    LinkList L;
    createList(&L, elems, 10);
    
    for (int i = 0; i < 5; i++) {
        insertList(&L, 'k'+i, 3);
    }
    
    ElemType elem;
    deleteList(&L, 10, &elem);
    printf("删除的元素是:%c\n", elem);
    
    LinkList find = L;
    while (find->next != NULL) {
        find = find->next;
        printf("%c\n", find->data);
    }
    
    return 0;
}
输出:

Hello, World!
删除的元素是:f
j
i
o
n
m
l
k
h
g
e
d
c
b
a
Program ended with exit code: 0


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
线性表是一种常见的数据结构,它包含了一组有序的元素,元素之间具有前驱和后继关系。线性表链式表示是其中一种实现方式。 线性表链式表示通过使用节点和指针来表示表中元素之间的关系。具体来说,每个节点中都包含了一个元素和一个指向下一个节点的指针。通过不断地遍历指针,就可以顺着链表找到表中的所有元素。 链式表示的优点是可以动态地插入和删除元素,而不需要移动其他元素。这是因为链表中的节点通过指针相互连接,可以在任意位置插入和删除元素。同时,链式表示可以节省内存空间,因为节点不需要连续的存储空间,可以灵活地分配内存。 实现链式表示的方式是使用结构体来定义节点和指针。节点结构体中包含了一个元素和一个指向下一个节点的指针。使用指针的方式可以实现链表节点之间的相互连接。 在C语言中,可以通过定义一个节点结构体来表示链表的节点,然后使用指针指向链表的头节点。通过遍历指针,可以遍历整个链表,并对链表进行插入、删除等操作。 总之,线性表链式表示通过节点和指针的方式来实现表中元素之间的关系。链式表示可以动态地插入和删除元素,并且节省内存空间。在C语言中,可以通过定义节点结构体和指针来实现链式表示实现链表的各种操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值