数据结构——链式表中基本操作的实现

本文详细探讨了数据结构中的链式表,讲解了如何实现插入、删除、查找等基本操作,通过实例分析加深理解,助你掌握链表的核心概念。
摘要由CSDN通过智能技术生成

/*
链式表中基本操作的实现
2018.04.12
*/

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<algorithm>

using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;

typedef struct{
    char no[20];
    char name[30];
    double price;
}BOOK;

typedef struct LNode{
    BOOK data;  //结点数据
    struct LNode *next; //节点的指针域
}LNode,*LinkList;

//---------------------------------------------------------------------------------------------
//单链表的初始化
//算法步骤:
//1.生成新结点作为头结点,用头指针L指向头结点;
//2.头结点的指针域置空;
Status InitList(LinkList &L){
    //构造一个空的单链表L
    L=new LNode;
    L->next=NULL;
    return OK;
}

//---------------------------------------------------------------------------------------------
//单链表的取值
//算法步骤:
//1.用指针p指向首元结点,用j做计数器初赋值为1;
//2.从首元结点开始一次顺着链域next向下访问;只有指向当前结点的指针p不为空(NULL),并且没有到达序号为i的结点时,则循环执行以下操作:
//  p指向下一结点
//  计数器j相应加一
//  退出循环时,若指针p为空或者计数器j>i,说明指定的序号i值不合法(i大于表长n或i小于等于0),取值失败返回ERROR;否则取值成功,此时j=i,p指向的结点就是要找的第i个结点,用参数e保存当前结点的数据域,返回OK;

Status GetElem(LinkList L,int i,BOOK &e){
    //在带头结点的单链表L中根据序号i获取元素的值,用e返回L中的第i个数据元素的值
    int j=1;    //初始化,计数器j初赋值为1
    LNode *p;
    p=L->next;  //初始化,p指向首元结点
    while(p&&j<i){
        ++j;        //计数器j相应加1
        p=p->next;  //p指向下一个结点
    }
    if(!p||j>i)
        return ERROR;   //i值不合法,i>n或i<=0
    e=p->data;      //取第i个结点的数据域
    return OK;
}

//---------------------------------------------------------------------------------------------
//单链表的按值查找
//算法步骤:
//1.用指针p指向首元结点;
//2.从首元结点开始依次顺着链域next向下查找,只要指向当前结点的指针p不为空,并且p所指向结点的数据域不等于给定值e,则循环执行:p指向下一结点;
//3.返回p;若成功,则返回结点的地址值;若失败,p的值为NULL;

//根据图书的书名查找
LNode *LocateElemOfname(LinkList L,BOOK e){
    //在带头结点的单链表L中查找值为e的元素
    LinkList p;
    p=L->next;  //初始化,p指向首元结点
    //while(p&&p->data!=e){ //顺链域往后扫描,直到p为空或p所指向结点的数据域等于e
    while(p&&strcmp(p->data.name,e.name)!=0){
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值