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

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

🎯目的:

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;
}
目录
相关文章
|
3天前
|
存储
数据结构链表详解(不仅顺序表可以,我链表也可以)
数据结构链表详解(不仅顺序表可以,我链表也可以)
11 0
|
4天前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
4天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
12 0
|
4天前
|
存储 Java
深入浅出数据结构之链表
深入浅出数据结构之链表
|
4天前
|
C++
数据结构(循环单链表
数据结构(循环单链表
12 2
|
4天前
|
C++
数据结构(双链表
数据结构(双链表
11 1
|
4天前
|
C++
数据结构(单链表
数据结构(单链表
9 0
|
4天前
|
存储 缓存
[数据结构]~双向+循环链表从(0~1)
[数据结构]~双向+循环链表从(0~1)
|
4天前
|
存储
[数据结构]单链表(从0->1)
[数据结构]单链表(从0->1)
|
4天前
|
存储
数据结构第三课 -----线性表之双向链表
数据结构第三课 -----线性表之双向链表