c语言线性表的链式表示和实现

/*线性表的链式存储实现*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node{
    int data;
    struct node *next;
}Node,*pNode;
//创建一个带头节点的空单链表
pNode CreateListHead(void){
    pNode L = (pNode)malloc(sizeof(Node));
    if(!L)
        exit(-1);
    L->next = NULL;
    return L;
}
//输出单链表
void DisLinkList(pNode L)
{
    pNode p = L->next;
    while(p){
        printf("%d ",p->data);
        p = p->next;
    }
}
//求单链表长度
int ListLength(pNode L){
    pNode p = L->next;
    int k = 0;
    while(p){
        p = p->next;
        k++;
    }
    return k;
}
//获取元素
int GetElem(pNode L,int pos, int *e){
    pNode p = L->next;
    int i = 1;
    while(p && i<pos){
        p=p->next;
        ++i;
    }
    if(!p || i>pos){
        return 0;
    }
    *e = p->data;
    return 1;
}
//插入元素
int ListInsert(pNode L,int pos, int e){
    pNode p = L;
    pNode pNew;
    int i = 1;
    while(p&& i<pos){
        p = p->next;
        ++i;
    }
    if(!p || i<pos)
        return 0;
    pNew = (pNode)malloc(sizeof(Node));
    pNew->data = e;
    pNew->next = p->next;
    p->next =pNew;
    return 1;
}
//删除元素
int ListDelete(pNode L,int pos ,int *e){
    pNode p = L;
    pNode q;
    int i=1;
    while(p->next && i<pos)
    {
        p = p->next;
        ++i;
    }
    if(!(p->next) || i>pos)
        return 0;
    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);
    return 1;

}
int main(void){
    pNode L;
    int e,f,g;
    int pos =7;
    L = CreateListHead();
    ListInsert(L,1,1);
    ListInsert(L,2,2);
    ListInsert(L,3,3);
    ListInsert(L,4,4);
    ListInsert(L,5,5);
    ListInsert(L,6,6);
    ListInsert(L,7,7);
    printf("输出单链表\n");
    DisLinkList(L);
    printf("\n获取第三个元素\n");
    GetElem(L,3,&e);
    printf("%d\n",e);
    printf("删除第四个元素\n");
    ListDelete(L,4,&f);
    printf("%d\n",f);
    g=ListLength(L);
    printf("单链表目前长度为%d\n",g);
    return 0;
}

代码比较简单,欢迎指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值