线性表的链式表示和实现(插入删除建空)

题解:后续的功能会不定期更新

emmm框架:

代码:

#include <iostream>
#include<cstdio>
using namespace std;
typedef struct
{
    int data;
}ElemType;
typedef struct LNode
{
     ElemType elem;
     struct LNode *next;
}LNode,*LinkList;

int GetElem_L(LinkList L, int i, ElemType& e)
{
    LNode *p = L->next;
    int j = 1;
    while (p&&j < i)
    {
        p = p->next;
        ++j;
    }
    if (!p || j>i)
        return 0;
    e = p->elem;
    return 1;
}
int ListInsert_L(LinkList &L, int i, ElemType e)
{
     LNode *p = L->next;
     int j = 1;
     while (p && j < i-1)
     {
         p = p->next;
         ++j;
     }
     if (!p || j>i-1)
         return 0;
     LNode *node =(LNode*)malloc(sizeof(LNode));
     node->elem = e;
     LNode* q = p->next;
     p->next = node;
     node->next = q;
     return 1;
}
int ListDelete_L(LinkList &L, int i, ElemType &e)
{
     LNode *p = L->next;
     int j = 1;
     while (p->next&&j < i - 1)//注意此处为p->next,因为若是p,则出来的p可能为空
     {
         p = p->next;
         ++j;
     }
     if (!p->next || j>i - 1)
         return 0;
     LNode*q= p->next;
     e = q->elem;
     p->next = p->next->next;
     free(q);
     return 1;
}
void CreateList_L(LinkList &L, int n)
{
     printf("Enter the value of the node:");
   // L = (LinkList)malloc(n*sizeof(LNode)); 如果像这样创建的话,
   //那就是生成连续存储空间的线性表,应该单独对每一个节点分配内存空间
     L = (LinkList)malloc(sizeof(LNode));
     L->next = nullptr;//先生成一个表头的单链表
     for (int i = n;i > 0;--i)
     {
          LNode *pnode = (LinkList)malloc(sizeof(LNode));
          scanf("%d",&pnode->elem.data);
          pnode->next = L->next;//插入方式为向表头的后一个插入,不然插在表尾太麻烦
          L->next = pnode;
     }
}
void ShowList(LinkList &L)
{
      LNode *pNode = L->next;
      while (pNode)
      {
          printf("%d  ", pNode->elem.data);
          pNode = pNode->next;
      }
}
int main()
{
     LinkList L;
     cout<<"Enter the length of the linked list:";
     int num;
     cin>>num;
     CreateList_L(L, num);//建表
     ShowList(L);//展示
     ElemType e1,temp;

     cout<<"\nTo increase the number of positions:";
     int place;
     cin>>place;
     cout<<"\nEnter the number to insert:";
     cin>>e1.data;
     ListInsert_L(L, place, e1);
     ShowList(L);

     cout<<"\nThe number of digits to be deleted:";
     int place1;
     cin>>place1;
     ListDelete_L(L, place1, temp);
     ShowList(L);
     printf("\nThe deleted node value is :%d\n", temp.data);
    return 0;
}

今天也是元气满满的一天!good luck!

时间: 2024-12-12 20:37:42

线性表的链式表示和实现(插入删除建空)的相关文章

线性表的链式存储结构

1 n个结点链结成一个链表,即为线性表的链式存储结构,由于每一个结点只包含一个指针域,因此称为单链表. 链表中第一个结点的存储位置成为头指针,那么整个链表的存取就必须是从头指针开始了. 有时候会在单链表的第一个结点前附设一个结点,称为头结点. 头指针与头结点的区别: 头指针: (1)头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针. (2)头指针具有标识作用,所以常用头指针冠以链表的名字. (3)无论链表是否为空,头指针都不为空.头指针是链表的必要元素. 头结点: (1)

线性表的链式存储之单链表的尾插法

对单链表进行遍历.查找.插入.删除等操作,最终效果如下: 相关C代码如下: /*线性表的链式存储之单链表的尾插法*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> /*定义变量*/ typedef int DataType; typedef struct node{     //定义链表结点数据结构 DataType data; struct node * pNext; }NODE; typedef

线性表的链式存储

线性表的链式存储 线性表的链式存储 基本概念 设计与实现 实现代码 优缺点 1. 基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息 数据结点 链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息 尾结点 链表中的最后一个数据结点,其下一元素指针为空,表示无后继. 2.设计与实现 在C语言中可以用结构体来定义链

线性表的链式表示和实现

本节内容讨论的线性表的另一种表示方法----链式存储结构,由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有弱点,但同时也失去了顺序表可随机存取的优点. 1.线性链表 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).因此,为了表示每个数据元素ai与其直接后续数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示直接后继的信息(即直接后继的存储位置).这两部分信息组

数据结构之线性表(链式存储结构)

线性表的实现分顺序存储结构和链式存储结构 上一节我们主要介绍了顺序存储结构,在最后我们还分别总结了顺序存储结构的优缺点, 对于顺序结构的缺点,我们有没有什么好的解决方法呢? 我们今天要介绍的线性表的链式存储结构就可以很好的解决顺序结构的缺点,一起来看. 顺序结构最大的缺点就是在进行插入和删除操作的时候,如果插入位置不理想,那么我们需要移动大量的元素,那产生这一问题的原因是什么呢? 仔细分析后,我们可以发现在顺序存储结构中,他们相邻的元素的存储位置也是相邻的,我们在申请内存的的时候,是一次性申请一

数据结构------线性表的链式表示与实现

不多说直接上代码: #include"stdafx.h" #include <stdio.h> #include <stdlib.h> /****************************************************************************** /* 数据类型和常量定义 /***********************************************************************

数据结构-线性表的链式结构

线性表的链式结构,与之前说过的线性表的顺序结构差不多,区别在于存储结构和方式的不一样. 在链式中,来一个数据就去寻找一个空间存储一个结点有多少数据占多大的地方,是动态的存储方式.另外顺序表如果存储1MB就只占1MB存储空间,但是链式表不一样,它会有额外的空间去存储对应结点的指针. 这样一分析结构就出来了,链式结构为两部分:1.结点域.2.指针域.实现方法用动态存储. 1 #include "stdio.h" 2 #include "stdlib.h" 3 4 typ

leetcode_1题——Swap Nodes in Pairs(线性表的链式存储)

Swap Nodes in Pairs Total Accepted: 45110 Total Submissions: 138992My Submissions Question Solution Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4-

数据结构第三篇——线性表的链式存储之单链表

线性表的链式存储结构的特点是用一组任意的存储单元来存储线性表的数据元素,这些单元可以分散在内存中的任意位置上,其在物理上可以是连续的,也可以是不连续的.具有链式存储结构的线性表称为线性链表. 为了表示出每个数据元素与其后继之间的关系,除了存储数据元素本身的信息之外,还需存储指示其直接后继的信息.这可以用一个结点(node)来完整的表示. 将节点中存储数据元素本身信息的域称为数据域:存储其直接后继位置的域称为指针域.指针域中存储的信息称作指针或链. 一般情况下,链表中每个结点可以包含若干个数据域和

【数据结构】-线性表的链式存储结构

引言:由于线性表的顺序存储结构在插入和删除时需要大量移动数据元素,从而引入线性表的链式存储结构. 线性表的链式存储结构:用一组任意的存储单元(可以连续也可以不连续)存储线性表的数据元素. 为了表示数据元素ai和其直接后继ai+1之间的逻辑关系,对ai来说,除了存储其本身的数据信息外,还需要存储其直接后继的存储位置.这两部分信息组成数据元素ai的存储映像(结点).它包含两个域:其中存储数据元素信息的域称为数据域:存储直接后继存储位置的域称为指针域. n个结点链接成一个链表,称为线性链表,由于此链表