数据结构— —单链表的基本操作

简介: 数据结构— —单链表的基本操作

🎯目的:

1、掌握线性链表的操作特点,即指针是逻辑关系的映像。

2、掌握动态产生单链表的方法。

3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。

4、熟练掌握单链表的取元素操作。


🎯内容:

1、定义单链表类型并动态创建单链表

2、实现线性表链式存储结构下元素的插入操作;

3、实现线性表链式存储结构下元素的删除操作;

4、实现线性表链式存储结构下取元素操作。


🎯环境:

TC或VC++。


🎯步骤:

🎐1.单链表的存储定义

typedef  struct  LNode
 
{
 
      ElemType      data;  // 数据域
 
      struct  LNode   *next;  // 指针域
 
  } LNode, *LinkList;



🎐2、从键盘上依次输入21、18、30、75、42、56,尾插法创建单链表,并输出单链表中的各元素值。



🎐3.分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。



🎐4.删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。



🎐5.取单链表中的第5个数据元素和第7个数据元素。



🎯完整代码:

#include "iostream"
#define OK 1;
#define ERROR 0;
typedef int Status; 
using namespace std;
typedef struct LNode{
  int data;
  struct LNode *next; 
}LNode,*LinkList;
Status InitList(LinkList &L){//创建单链表 
  L=new LNode;//生成头节点
  L->next=NULL;//使头结点指向为空 
  return OK; 
}
void GreateList_L(LinkList &L,int n){//链表的初始化
   LNode *p,*r;
   r=L;
   cout<<"你要输入几个数:";
   cin>>n;
   cout<<"请输入您要输入的数:"<<endl;
   for(int i=0;i<n;i++){
     p=new LNode;
     cin>>p->data;
     p->next=NULL;
     r->next=p;
     r=p;
   }
}
Status GetElem(LinkList L,int i,int &e){//链表的取值
  LNode *p;
  p=L->next;
  int j=1;
  while(p&&j<i){
    p=p->next;
    j++;
  }
  if(!p||j>i)return ERROR;
  e=p->data;
  printf("第%d个结点的值是%d\n",i,e);
  return OK;
}
LNode *LocateElem(LinkList L,int e){//链表的查找
  LNode *p;
  p=L->next;
  while(p&&p->data!=e)
    p=p->next;      
  return p;
}
Status ListINsert(LinkList &L,int i,int e){//链表的插入
  LNode *p,*s;
  p=L;int j=0;
  while(p&&(j<i-1)){
    p=p->next;
    j++;
  }
  if(!p||j>i-1)
    return ERROR;
  s=new LNode;
  s->data=e;
  s->next=p->next;
  p->next=s;
  return OK;
}
Status ListDelete(LinkList &L,int i){//链表的删除
  LNode *p,*q;
  p=L;
  int j=0;
  while((p->next)&&(j<i-1)){
    p=p->next;
    j++;
  }
  if(!(p->next)||(j>i-1))
    return ERROR;
  q=new LNode;
  q=p->next;
  p->next=q->next;
  delete q;
  return OK;
}
void OutLinkList(LinkList L){//链表的输出 
  LNode *p;
  p=L->next;
  printf("链表中的值为:\n");
  while(p){
    printf("%-4d",p->data);
    p=p->next;
  }
  printf("\n");
}
void GreateList_G(LinkList &L){//链表的求逆
  LNode *p,*q;
  p=L->next;
  L->next=NULL;
  while(p){
    q=p->next;
    p->next=L->next;
    L->next=p;
    p=q;
  } 
}
 
int main(){
  printf("1.创建\n2.初始化\n3.取值\n4.查找\n5.插入\n6.删除\n7.求逆\n0.退出\n-----------------------------\n");
  LinkList L;
  int f=1;
  int i,n,e,choose;
  while(f){
    printf("请输入您的选择:");
    cin>>choose;
    switch(choose){
      case 1:
        InitList(L);
        printf("恭喜您,链表创建成功!\n");
        break;
      case 2:
        GreateList_L(L,n);
        printf("初始化成功\n");
        OutLinkList(L);
        break;
      case 3:
        printf("请输入您要取值的位置:");
        cin>>i;
        if(GetElem(L,i,e))
          printf("取值成功\n");
        else
          printf("取值失败\n");
         break;
      case 4:
        printf("请输入您要查找的值:");
        cin>>e;
        if(LocateElem(L,e)) 
          printf("查找成功!\n");
        else
          printf("查找失败!\n");
        break;
      case 5:
        printf("请输入您要插入的位置和数值:");
        cin>>i>>e; 
        if(ListINsert(L,i,e)==1)
          printf("插入成功\n");
        else
          printf("插入失败\n");
        OutLinkList(L);
        break;
      case 6:
        printf("请输您要删除的位置:");
        cin>>i;
        if(ListDelete(L,i)==1)
          printf("删除成功\n");
        else
          printf("删除失败\n");
        OutLinkList(L);
        break;
      case 7:
        GreateList_G(L);
        OutLinkList(L); 
        break;
      case 0:
        f=0;
        printf("恭喜您,已退出\n");
        break;  
    }
  }
  return 0;
}
相关文章
|
2月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
65 4
|
11天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
72 5
|
3月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
55 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
117 4
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
2月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
53 0
|
3月前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
29 1
|
3月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
35 7