/*
链式表中基本操作的实现
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){
数据结构——链式表中基本操作的实现
最新推荐文章于 2023-10-25 20:22:48 发布
本文详细探讨了数据结构中的链式表,讲解了如何实现插入、删除、查找等基本操作,通过实例分析加深理解,助你掌握链表的核心概念。
摘要由CSDN通过智能技术生成