国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)之線性表】單鏈表實現(xiàn)圖書管理系統(tǒng)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)之線性表】單鏈表實現(xiàn)圖書管理系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

????????本次實驗是在DEV C++軟件上進(jìn)行實現(xiàn)的。語言采用的是c++語言,但在整體上與c語言大致相似(不管用什么語言實現(xiàn),思想是不變的)。

? ? ? ? 此次實現(xiàn)的整體思路:首先定義圖書這個抽象數(shù)據(jù)類型,并且定義節(jié)點(diǎn)抽象數(shù)據(jù)類型(根據(jù)這些抽象數(shù)據(jù)類型對下面的數(shù)據(jù)進(jìn)行定義)。然后進(jìn)行單鏈表的初始化、單鏈表的取值、單鏈表的查找、單鏈表的插入、單鏈表的刪除、尾插法建立單鏈表。在尾插法建立單鏈表時使用了文件流讀取txt文件,并將其存儲到鏈表中。最后建立主函數(shù),使用主函數(shù)調(diào)用上述的算法。

? ? ? ? 具體程序代碼如下:

#include<iostream>
#include<fstream>
#include <iomanip>
typedef int Status; 
using namespace std;
struct Book {
	string id;//ISBN
	string name;//書名
	double price;//價格 
};
typedef struct LNode {
	Book data;//節(jié)點(diǎn)數(shù)據(jù)
	struct LNode *next;//節(jié)點(diǎn)指針域 
} LNode, *LinkList;//都是LNode的別名,其中LinkList 為指向結(jié)構(gòu)體LNode的指針類型
//單鏈表的初始化
Status InitList (LinkList &L) {
	//構(gòu)建一個空鏈表
	L = new LNode;//生成新節(jié)點(diǎn)作為頭節(jié)點(diǎn),頭指針L指向頭結(jié)點(diǎn)
	L->next = NULL;//頭指針指針域置空。 
	return 1; //初始化成功返回1. 
}
// 單鏈表的取值
Status GetElem (LinkList L, int i, Book &e) {
	//在帶頭節(jié)點(diǎn)的單鏈表L中查找第i個元素,并賦值給e
	LNode *p;
	int j;
	p = L->next;//初始化,p指向首元節(jié)點(diǎn),計數(shù)器初值賦值為1. 
	j = 1;
	while (p && j < i) {//順著鏈表往下找,直到p為空或者p指向第i個元素。 
		p = p->next;
		++j;
	}
	if(!p || j > i) {
		cout << "i值不合法。";
		return 0;
	} 
	e = p->data;//將*P節(jié)點(diǎn)的數(shù)據(jù)賦值給e。 
	return 1;//取值成功返回1. 
} 
//單鏈表的查找
Status LocateElem (LinkList L,double e) {
	//在帶頭結(jié)點(diǎn)的單鏈表L中查找值為e的元素。 
	LNode *p;
	int j = 1;
	p = L->next;//初始化,指針p指向首元節(jié)點(diǎn) 
	while (p && p->data.price != e) {//順著鏈表向下查找,直到p為空,或者p所指的數(shù)據(jù)域等于e。 
		p = p->next;
		++j;
	}
	return j;//查找成功返回e的節(jié)點(diǎn)地址p,失敗則返回NULL。 
} 
//單鏈表的插入
Status ListInsert (LinkList &L,int i, Book &e) {
	LNode * p, * s;
	int j = 0;
	p = L;
	while (p && j < i -1) {//查找第i-1個元素節(jié)點(diǎn),p指向該節(jié)點(diǎn)。 
		p = p->next;
		++j;
	} 
	if(!p || j > i - 1) {
		cout << "i值不合法!??!";
		return 0;
	}
	s = new LNode;//生成新節(jié)點(diǎn)*s。 
	s->data = e;//將新節(jié)點(diǎn)的數(shù)據(jù)域置為e。 
	s->next = p->next;//將節(jié)點(diǎn)*s的指針域指向第i個元素。 
	p->next = s;//將節(jié)點(diǎn)*p的指針域指向*s的指針域。 
	return 1;//插入成功返回1. 
} 
//單鏈表的刪除
Status ListDelete (LinkList &L, int i) {
	LNode *p, *q;
	p = L;
	int j = 0;
	while (p->next && j < i - 1) {//查找第i-1個節(jié)點(diǎn),p指向第i-1個位置。 
		p = p->next;
		++j;
	}
	if(!(p->next) || j > i - 1) {
		cout << "i值不合法,刪除失?。。。?;
	} 
	q = p->next;//臨時保存被刪除節(jié)點(diǎn)的地址以備釋放。
	p->next = q->next;//改變刪除節(jié)點(diǎn)前驅(qū)結(jié)點(diǎn)的指針域。
	delete q;
	return 1;//刪除成功返回1. 
} 
//使用尾插法創(chuàng)建單鏈表
void CreateList (LinkList &L, int n) {
	LinkList p,r;
	string head_1,head_2,head_3;
	L = new LNode;
	L->next = NULL;//先建立一個帶頭結(jié)點(diǎn)的空鏈表。
	r = L;//尾指針r指向頭結(jié)點(diǎn)
	int length = 0;
	fstream file;
	file.open("book.txt");
	if(!file) {
		cout << "未找到相關(guān)文件,無法打開?。。? <<endl;
		exit(0);
	} 
	file >> head_1 >> head_2 >> head_3;
	while (!file.eof()) {//蔣文件中的信息運(yùn)用尾插法插入到鏈表中。 
		p = new LNode;//生成新節(jié)點(diǎn)。
		file >> p->data.id >> p->data.name >> p->data.price;//輸入元素賦值給新節(jié)點(diǎn)的數(shù)據(jù)域。
		p->next = NULL;
		r->next = p;//新節(jié)點(diǎn)*p插入到尾結(jié)點(diǎn)*r之后。
		r = p;//r指向新的尾結(jié)點(diǎn)*p 
		length++;//同時對鏈表的長度進(jìn)行統(tǒng)計 
	}
	file.close(); 
} 
//構(gòu)建主函數(shù),調(diào)用上述算法
 int main() {
 	int i = 0, n = 0, choose,length = 0;
 	double price;
 	Book e;
 	LinkList L,p;
 	choose = -1;
	cout << "1,建立\n";
 	cout << "2,輸入\n";
 	cout << "3,取值\n";
 	cout << "4,查找\n";
 	cout << "5,插入\n";
 	cout << "6,刪除\n";
 	cout << "7,輸出\n";
 	cout << "8,退出\n";
 	while (choose != 0) {
	 	cout << "請選擇:\n";
	 	cin >> choose;
	 	switch (choose) {
	 		case 1://建立單鏈表。
			 	{
			 		if(InitList(L)) {
			 		cout << "成功建立鏈表!\n";
					 }
		 			break;
				 }
	 		case 2://使用尾插法創(chuàng)建單鏈表。
			 	{
			 		CreateList (L,length); 
			 	  	cout << "輸入book.txt 信息完畢\n";
				 }
			 	break;
			case 3://單鏈表的按序號取值,
				   //調(diào)用函數(shù):Status GetElem (LinkList L, int i, Book &e)
				{
					cout << "請輸入序號:\n";
					cin >> i;
					GetElem(L,i,e);//調(diào)用單鏈表的取值函數(shù)。 
					cout << "序號為" << i << "的圖書信息為:\n";
					cout << e.id << "\t\t" << e.name << "\t\t"<<e.price;
				}
				break; 
			case 4://單鏈表的查找,調(diào)用函數(shù):
				   // Status LocateElem (LinkList L,double e)
				{
					price = 0;
					cout << "請輸入查找的價格;";
					cin >> price;
					n = LocateElem(L,price);
					cout << "第一個出現(xiàn)該價格的圖書序號為:";
					cout << n;
				}
				break;
			case 5://單鏈表的插入,調(diào)用函數(shù):
			       // Status ListInsert (LinkList &L,int i, Book &e)
			    {
			    	cout << "請輸入插入的位置,和圖書信息(編號、書名、價格):";
				    cin >> i >> e.id >> e.name >> e.price;
				    if(ListInsert(L,i,e)) {
				    	cout << "插入成功?。。?;
					}
				}
				break;
			case 6://單鏈表的刪除,調(diào)用函數(shù):
				   // Status ListDelete (LinkList &L, int i)
				{
					cout << "請輸入所要刪除圖書的序號:\n";
					cin >> i;
					if(ListDelete(L,i)) {
						cout << "刪除成功?。。?;
					}
				}
				break;
			case 7://單鏈表的輸出
				{
					cout << "當(dāng)前圖書系統(tǒng)信息(鏈表)讀出:\n";
					p = L->next;//節(jié)點(diǎn)*p指向鏈表的首元節(jié)點(diǎn)。 
					while (p) {
						cout << left << setw(15) << p->data.id <<
						left << setw(50)<<p->data.name <<left<<setw(5)
						<<p->data.price<<endl;
						p=p->next;
					} 
					cout <<endl;
				}
				break;
			case 8:
				choose = 0;
				break;
			default:
				break; 
		 }
	 }
	 return 0;
 }

程序中用到的book.txt文件:

鏈接:https://pan.baidu.com/s/1RZm-5azt7Qu4JMD2Ll_HFw?pwd=tfr2?文章來源地址http://www.zghlxwxcb.cn/news/detail-717275.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)之線性表】單鏈表實現(xiàn)圖書管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)庫課設(shè)】圖書館資源管理系統(tǒng) 源碼+流程圖+結(jié)構(gòu)設(shè)計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實現(xiàn)

    【數(shù)據(jù)庫課設(shè)】圖書館資源管理系統(tǒng) 源碼+流程圖+結(jié)構(gòu)設(shè)計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實現(xiàn)

    一個管理員編號對應(yīng)一個密碼,且需要有管理員注冊密匙。 可以在圖書信息表中錄入、修改、刪除圖書。 可以在圖書信息表中查詢書籍。 可以編輯圖書借閱、歸還信息。 可以編輯欠款信息。 可以編輯讀者信息表。 圖書館注冊,獲得讀者編號。 可以在圖書信息表中查閱書籍

    2024年02月10日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表-單鏈表

    【數(shù)據(jù)結(jié)構(gòu)】線性表-單鏈表

    編程語言:C++ 前言: 節(jié)點(diǎn) :節(jié)點(diǎn)是鏈表的一個基本單元,包含兩部分——數(shù)據(jù)域和指針域,數(shù)據(jù)域用于存儲數(shù)據(jù),指針域存儲下一個節(jié)點(diǎn)的地址,形成鏈結(jié)。 什么是單鏈表 :n個節(jié)點(diǎn)鏈結(jié)成一個鏈表,即為線性表(a1,a2,a3……)的鏈?zhǔn)酱鎯Y(jié)構(gòu),每個節(jié)點(diǎn)只包含一個指針域

    2024年04月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)-->線性表-->單鏈表

    數(shù)據(jù)結(jié)構(gòu)-->線性表-->單鏈表

    ? 鏈表:鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。 與順序表不同的是,鏈表里的每節(jié)都是獨(dú)立申請下來的空間,我們稱之為“節(jié)點(diǎn)、結(jié)點(diǎn)”。 節(jié)點(diǎn)的組成主要由兩個部分:當(dāng)前節(jié)點(diǎn)要保存的數(shù)據(jù)和保

    2024年02月19日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)_線性表、順序表、單鏈表

    數(shù)據(jù)結(jié)構(gòu)_線性表、順序表、單鏈表

    目錄 1. 線性表的定義和基本操作 1.1 線性表的定義 1.2 線性表的特點(diǎn) 1.3 線性表的基本操作 2. 線性表的順序表示 2.1 順序表的定義 2.2 順序表上基本操作的實現(xiàn) 2.2.1 插入操作 2.2.2 刪除操作 2.2.3 按值查找 2.3 相關(guān)練習(xí)鞏固 3. 線性表的鏈?zhǔn)奖硎?3.1 單鏈表的定義 3.2 單鏈表上基本操

    2024年02月02日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)——圖書管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)——圖書管理系統(tǒng)

    1.深入理解數(shù)據(jù)結(jié)構(gòu)的基本理論,掌握數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法訓(xùn)練基礎(chǔ)知識和基本方法的綜合運(yùn)用。 2.熟悉和重新掌握c++語言,獨(dú)立編制一個具有解決實際應(yīng)用問題的應(yīng)用程序。 3.制作一個圖書管理系統(tǒng),使他實現(xiàn)查找、刪除、插入、輸出、取值等這些基礎(chǔ)操作。 4.掌握數(shù)據(jù)結(jié)

    2024年02月13日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)項目:圖書管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)項目:圖書管理系統(tǒng)

    隨著科技的不斷進(jìn)步,圖書的種類也隨之日益增多。圖書館所需要處理的圖書管理問題從而突出,而讀者也許需要能夠更方便的查找和查看圖書館的書籍。為解決以上問題,本系統(tǒng)設(shè)計時主要針對圖書管理人員需求做出對圖書信息的錄入、刪除、修改、導(dǎo)出等功能。 (1)用

    2024年02月04日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)課設(shè)--圖書管理系統(tǒng)(含淚版)

    數(shù)據(jù)結(jié)構(gòu)課設(shè)--圖書管理系統(tǒng)(含淚版)

    設(shè)計一個計算機(jī)管理系統(tǒng)完成圖書管理基本業(yè)務(wù)。 【基本要求】 (1)每種書的登記內(nèi)容包括書號、書名、著作者、現(xiàn)存量和庫存量; (2)對書號建立索引表(線性表)以提高查找效率; (3)采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)--線性表(順序表、單鏈表、雙鏈表、循環(huán)鏈表、靜態(tài)鏈表)

    前言 ?學(xué)習(xí)所記錄,如果能對你有幫助,那就泰褲辣。 目錄 1.線性表概念 定義 基本操作 2.順序表 定義 順序表的實現(xiàn)--靜態(tài)分配 動態(tài)分配 順序表的特點(diǎn) 順序表的插入和刪除 順序表的查找 按位查找 ?按值查找 3.單鏈表 定義 單鏈表的初始化 不帶頭節(jié)點(diǎn)的單鏈表 帶頭節(jié)點(diǎn)的單

    2024年02月11日
    瀏覽(103)
  • 【玩轉(zhuǎn)408數(shù)據(jù)結(jié)構(gòu)】線性表——單鏈表的定義以及增刪改查(線性表的鏈?zhǔn)奖硎?上)

    【玩轉(zhuǎn)408數(shù)據(jù)結(jié)構(gòu)】線性表——單鏈表的定義以及增刪改查(線性表的鏈?zhǔn)奖硎?上)

    ? ? ? ? 到這里我們已經(jīng)了解到線性表是具有 相同數(shù)據(jù)類型 的 有限個數(shù)據(jù)元素 序列,而線性表的順序存儲也就是順序表,順序表的存儲形式十分直觀,我們在實現(xiàn)時使用數(shù)組進(jìn)行實現(xiàn),但順序表在插入或者刪除元素時需要移動大量元素,那么怎么樣才能在插入刪除元素時不

    2024年02月21日
    瀏覽(25)
  • 【軟考中級-軟件設(shè)計師】day4:數(shù)據(jù)結(jié)構(gòu)-線性表、單鏈表、棧和隊列、串

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包