字典的线性表描述

本文介绍了一个名为`StoredChain`的类,它使用链表结构实现了字典功能,包括插入(Insert)、删除(Remove)、搜索(Search)操作。`Student`结构体作为链表节点的数据部分,包含学生ID和姓名。`ChainNode`定义了链表节点,而`StoredChain`类中定义了各种成员函数以实现字典操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma once
#ifndef _STOREDCHAIN_H_
#define _STOREDCHAIN_H_
#include <assert.h>

struct Student
{
	long ID_number;
	char name[12];
	Student& operator=(long k1)
	{
		ID_number=k1;
		return *this;
	}
	bool operator<(long k1) {return (ID_number<k1) ? true : false;}
	bool operator>(long k1) {return (ID_number>k1) ? true : false;}
	bool operator==(long k1) {return (ID_number==k1) ? true : false;}
	bool operator<(const Student& pr) {return (ID_number<pr.ID_number) ? true : false;}
	bool operator>(const Student& pr) {return (ID_number>pr.ID_number) ? true : false;}
	bool operator==(const Student& pr) {return (ID_number==pr.ID_number) ? true : false;}
};

struct ChainNode
{
	Student data;
	ChainNode *link;
	ChainNode() : link(NULL) { }
	ChainNode(Student& e1, ChainNode *next=NULL) : data(e1), link(next) { }
};

class StoredChain
{
public:
	StoredChain() {first=new ChainNode; assert(first!=NULL);}
	~StoredChain() {makeEmpty(); delete first;}
	ChainNode *Search(const long k1) const                //搜索;
	{
		ChainNode *p=first->link;
		while(p!=NULL&&p->data<k1) p=p->link;
		if(p!=NULL&&p->data==k1) return p;
		else return NULL;
	}
	void Insert(const long k1, Student& e1)
	{
		ChainNode *p=first->link, *pre=first, *newNode;
		while(p!=NULL&&p->data<k1) {pre=p; p=p->link;}
		if(p!=NULL&&p->data==k1) {p->data=e1; return;}
		newNode=new ChainNode(e1);
		assert(newNode!=NULL);
		newNode->link=p; pre->link=newNode;
	}
	bool Remove(const long k1, Student& e1)
	{
		ChainNode *p=first->link, *pre=first;
		while(p!=NULL&&p->data<k1) {pre=p; p=p->link;}
		if(p!=NULL&&p->data==k1)
		{
			pre->link=p->link; e1=p->data;
			delete p;
			return true;
		}
		else return false;
	}
	ChainNode *Begin() {return first->link;}
	ChainNode *Next(ChainNode *current) const
	{
		if(current!=NULL) return current->link;
		else return NULL;
	}
private:
	void makeEmpty()
	{
		ChainNode *q;
		while(first->link!=NULL)
		{
			q=first->link;
			first->link=q->link;
			delete q;
		}
	}
private:
	ChainNode *first;
};

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值