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

數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.任務:

[問題描述]

使用鏈表設計一個保存信息的系統(tǒng),該系統(tǒng)擁有類似區(qū)塊鏈的設計以防止信息被輕易篡改。

該題目使用一個鏈表。信息保存在鏈表的每一個節(jié)點中,每個節(jié)點需要包含該節(jié)點的編號、信息和校驗碼。其中:

+ 每個節(jié)點的編號按照順序遞增,從0開始。

+ 節(jié)點中包含的信息是字符串,且每個字符的ASCII碼范圍為0-127,以\0結(jié)束。

+ 每個節(jié)點的校驗碼等于上一個節(jié)點的校驗碼+本節(jié)點的節(jié)點編號+本節(jié)點信息中字符串各字符ASCII碼之和 mod 113。

+ 首個節(jié)點的校驗碼則是本節(jié)點信息中字符串各字符ASCII碼之和 mod 113。

+ 有效的鏈表要求所有節(jié)點的校驗碼都能夠成功按照上述算法得出。

[基本要求]

(1)要求從文本文件中輸入;

(2)給定鏈表,檢查鏈表是否有效。若無效,輸出首個無效節(jié)點的節(jié)點編號;

(3)允許向鏈表中添加信息,要求保證鏈表始終有效;

(4)篡改一個有效的鏈表中特定編號的節(jié)點信息內(nèi)容,保持篡改后的鏈表仍然有效。注意,可能需要篡改多個節(jié)點以達到此要求。

2.采用的數(shù)據(jù)結(jié)構(gòu):

采用單鏈表

3.算法設計思想:

? ? ? ? 使用rand函數(shù)隨機在文檔中生成區(qū)塊鏈內(nèi)容,隨后從文件中讀入內(nèi)容。對于區(qū)塊鏈的校驗碼進行計算和校對。當鏈表中元素的發(fā)生添加與修改的操作時,同時對于各結(jié)點的校驗碼進行改動??臻g復雜度:S(n)=O(n),時間復雜度T(n)=O(n^2)。

4.源程序:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <sstream>
#include <ctime>
using namespace std;

typedef struct LNode
{
	int code;
	string data;
	int DataAscii;
	int check;
	LNode *next;
}*LinkList,LNode;

int num=0;
int Create()
{
	srand((unsigned)time(NULL));                      //隨機生成區(qū)塊鏈內(nèi)容 

	ofstream out;
	out.open("demo1.txt", ios::out);
	if (!out.is_open()) 
	{
		printf("Init Error\n");
		return 0;
	}
    string H;
	int len = rand() % 30 + 1;
	for (int j = 0; j < len; ++j) 
	{
		H += rand() % 92+33;
	}
	H += '\0';
	out << H; 
	for (int i = 1; i < 1000; ++i) 
	{
		string str;
		int len = rand() % 30 + 1;
		for (int j = 0; j < len; ++j) 
		{
			str += rand() % 92+33;
		}
		str += '\0';
		out << endl<< str ;
	}
	out.close();                                      //在文檔中生成完畢 
}

int input(LinkList &L)
{
	ifstream infile;
	char ch;
	infile.open("demo1.txt",ios::in);
	LNode *p=L;
	int asc=0;
	if(infile)
	{
		while(!infile.eof())
		{
			LNode *newNode=new LNode;
			p->next=newNode;
			p=p->next;
			p->next=NULL;
	    	p->code=num;
	    	num++;
			getline(infile,p->data);
			string k=p->data;
	        int s=0;
	        for(int i=0;k[i]!='\0';i++)
	        {
	        	s=s+int(k[i]);
        	}
            p->DataAscii=s;
            asc=(asc+s+num-1)%113;                  //計算校驗碼 
			p->check=asc;
		}
	}
	else
	{
		printf("打開失敗.\n");
		return 0;
	}
	infile.close();
	p=L->next;
	printf("鏈表的編號、信息的ASCII碼和校驗碼依次為:\n");
	while(p)
	{
		printf("%d %d %d\n",p->code,p->DataAscii,p->check);
		p=p->next;
	}
	printf("--------------------------------------------------\n");
}

void AddData(LNode* p,string s)                    //增加數(shù)據(jù) 
{
	LNode *t = p;
	while (t->next != NULL)
	{
		t=t->next;
	}
	int a=t->check;
	LNode* q = new LNode;
	q->code = num;
	num++;
	q->data = s;
	int sum = 0;
	for (int i = 0; i < q->data.size(); ++i)
	{
		sum += q->data[i];
	}
	q->DataAscii=sum;
	q->check = (sum + q->code + a) % 113;
	t->next = q;
	q->next = NULL;
	cout << "添加完成!\n";
	cout<<"新增的結(jié)點為:\n";
	cout<<q->code<<" "<<q->data<<" "<<q->DataAscii<<" "<<q->check<<endl;
		
}

void Correct(LinkList &L)                              //修改指定位置數(shù)據(jù) 
{
	printf("請輸入需要修改的位置:\n");
	int place;
	scanf("%d",&place); 
	LNode *p;
	p=L;
	for(int i=0;i<place;i++)
	{
		p=p->next;
	}
	cout << "請輸入修改后的的信息:\n";
	string s2="";
	cin>>s2;
	p->next->data=s2;
	int s=0;
	for(int i=0;s2[i]!='\0';i++)
	{
		s=s+int(s2[i]);
    }
    p->next->DataAscii=s;
	printf("是否需要修改校驗碼 是:1/否:0\n");
	int h;
	cin>>h;
	if(h==1)
	{
		while(p->next)
		{
			p->next->check=(p->next->DataAscii+p->check+p->next->code) % 113;
			p=p->next;
		}
		cout<<"校驗碼修改完成!\n";
	}			
}

int CheckCode(LinkList &L)                                 //核驗校驗碼 
{
	LNode *p;
	p=L->next;
	while(p->next)
	{
		if(p->next->check==(p->next->DataAscii+p->check+p->next->code) % 113)
		{
			p=p->next;
			continue;
		}
		else
		{
			cout<<"該鏈表存在錯誤!"<<endl;
			return 0;
		}
	}
	cout<<"該鏈表有效!"<<endl;
}

void CorrectChoice(LinkList &L)                              //校正所有校驗碼 
{
	LNode *p;
	p=L;
	p->next->check=(p->next->DataAscii+p->next->code) % 113;
	p=p->next;
	while(p->next)
	{
		p->next->check=(p->next->DataAscii+p->check+p->next->code) % 113;
		p=p->next;
	}
	cout<<"校驗碼全部修改完成!\n";
}

int main() 
{
	LinkList L;
	L=new LNode;
	L->next=NULL;
	Create();
	input(L);
	while(1)
	{
		system("pause");
		system("cls");
		cout << "請選擇操作類型:\n1.向鏈表中添加信息.\n2.修改特定編號的結(jié)點內(nèi)容"<<endl;
		cout<<"3.輸出鏈表各個結(jié)點內(nèi)容.\n4.檢查鏈表是否有效.\n5.校正所有校驗碼.\n6.退出\n";
		int choice;
		scanf("%d",&choice);
		if(choice==1)
		{ 
		    LNode *p;
		    p=L;
		    string data;
			cout << "請輸入要添加的信息:\n";
			cin >> data;
			AddData(p, data);	
		} 
		else if(choice==2)
		{
			Correct(L);
		}
		else if(choice==3)
		{
			LNode *p;
			p=L->next;
	        printf("鏈表的編號、信息、信息的ASCII碼和校驗碼依次為:\n");
	        while(p)
        	{
	        	cout<<p->code<<" "<<p->data<<" "<<p->DataAscii<<" "<<p->check<<endl;
	        	p=p->next;
	        }
	        cout<<"輸出完成!\n";
		}
		else if(choice==4)
		{
			CheckCode(L);
		}
		else if(choice==5)
		{
			CorrectChoice(L);
		}
		else if(choice==6)
		{
			break;
		}
	}
	return 0;
}

5.源程序測試數(shù)據(jù)及結(jié)果

數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈

區(qū)塊鏈測試用例

數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈

?區(qū)塊鏈測試結(jié)果1

數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈

區(qū)塊鏈測試結(jié)果2

數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈

區(qū)塊鏈測試結(jié)果3文章來源地址http://www.zghlxwxcb.cn/news/detail-415004.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)課程設計1: 區(qū)塊鏈的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)課程設計 ——考試報名系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)課程設計 ——考試報名系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)課程設計 ——考試報名系統(tǒng) 一、項目功能要求 完成對考生信息的建立,查找,插入,修改,刪除等功能。其中考生信息包括準考證號,姓名,性別,年齡和報考類別等信息。項目在設計時應首先確定系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),定義類的成員變量和成員函數(shù);然后實現(xiàn)各成員

    2024年02月04日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計 倉儲管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)課程設計 倉儲管理系統(tǒng)

    【基本功能】 把貨品信息表抽象成一個線性表,貨品信息(包括ID、貨品名、定價、數(shù)量等)作為線性表的一個元素,實現(xiàn):按ID、貨品名分別查找某貨品信息(包括ID、貨品名、定價、數(shù)量等);收錄貨品(如果貨品在帳中已有,則只將總庫存量增加。否則插入新增信息);

    2024年01月23日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計——項目2:校園導游咨詢

    數(shù)據(jù)結(jié)構(gòu)課程設計——項目2:校園導游咨詢

    【問題描述】 設計一個校園導游程序,為來訪的客人提供各種信息查詢服務。 【基本要求】 設計你所在學校的校園平面圖,所含景點不少于10個.以圖中頂點表示校 內(nèi)各景點,存放景點名稱、代號、簡介 等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。 為來訪客人提供圖中任

    2024年02月02日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)課程設計】簡單搜索引擎系統(tǒng)

    【數(shù)據(jù)結(jié)構(gòu)課程設計】簡單搜索引擎系統(tǒng)

    該程序使用python語言實現(xiàn)利用爬蟲代碼爬取網(wǎng)站鏈接信息,將網(wǎng)站中文詞語通過結(jié)巴分詞進行分割,并存儲爬取的數(shù)據(jù)信息,利用結(jié)巴分詞庫處理輸入框用戶輸入的詞語,進行搜索,通過鏈接評價函數(shù),優(yōu)先顯示評分較高的鏈接;設計簡單的html頁面,實現(xiàn)可視化搜索功能。

    2024年01月23日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計:學生成績管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)課程設計:學生成績管理系統(tǒng)

    目 ?錄 第一章 ??需求分析 第二章 概要設計 第三章 詳細設計 第四章 測試報告 第五章 安裝及使用 第六章 項目總結(jié) 第七章 源碼 一.需求分析 ? ? ? ?學生成績管理是一個學校不可缺少的部分,它的內(nèi)容對于學校的管理者和學生以及學生家長來說都至關(guān)重要,所以一個良好

    2024年02月02日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計——哈夫曼編/譯碼系統(tǒng)設計與實現(xiàn)(C++)

    數(shù)據(jù)結(jié)構(gòu)課程設計——哈夫曼編/譯碼系統(tǒng)設計與實現(xiàn)(C++)

    對于生產(chǎn)實際的問題,本設計可以作為一個無損數(shù)據(jù)壓縮工具,在需要傳輸海量數(shù)據(jù)時,利用哈夫曼編碼可以將數(shù)據(jù)進行壓縮,從而減小傳輸?shù)臄?shù)據(jù)量,提高數(shù)據(jù)傳輸效率。同時,哈夫曼編碼也可以應用于數(shù)據(jù)加密和解密等領(lǐng)域。 本設計的主要目的是學習哈夫曼編碼算法,并

    2024年02月04日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計-宿舍管理查詢軟件-(C/C++)

    數(shù)據(jù)結(jié)構(gòu)課程設計-宿舍管理查詢軟件-(C/C++)

    目錄 1. 系統(tǒng)需求分析 ? ? ?1.1 設計理由與意義 ? ? ?1.2 功能需求分析 ? ? ?1.3 數(shù)據(jù)需求分析 2. 系統(tǒng)設計 ? ? ? 2.1 數(shù)據(jù)結(jié)構(gòu)類型設計 ? ? ? 2.2 整體功能結(jié)構(gòu)設計 ? ? ?2.3 子模塊詳細設計 ? ? ? 2.4 程序流程圖設計 3.系統(tǒng)實現(xiàn) ? ? ? 3.1 系統(tǒng)源代碼 4.運行效果截圖(部分)

    2024年02月05日
    瀏覽(24)
  • 【用C語言描述數(shù)據(jù)結(jié)構(gòu)】課程設計:歌手比賽系統(tǒng)

    【用C語言描述數(shù)據(jù)結(jié)構(gòu)】課程設計:歌手比賽系統(tǒng)

    ?作者簡介:一名在讀大二學生,希望大家多多支持?????? ??系列專欄:數(shù)據(jù)結(jié)構(gòu) ??個人主頁:夢園的CSDN博客 文末附有全部代碼哦 ???? 文末附有全部代碼哦~ 設計一個簡單的歌手比賽績管理程序,對一次歌手比賽的成績進行管理,使用 鏈表 實現(xiàn),基本的設計要求如

    2024年02月03日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)與算法課程設計---最小生成樹的應用

    數(shù)據(jù)結(jié)構(gòu)與算法課程設計---最小生成樹的應用

    1.問題 假定有這么一個問題,有11個城市,城市之間有一些天然氣管道,鋪設天然氣管道需要花費不同的金額,現(xiàn)在要你選擇其中一些天然氣管道,使得所有城市可以互相聯(lián)通且花費最小。 2.分析 我們把這個問題抽象為一張圖,每個城市是一個頂點,城市與城市之間的管道是

    2024年02月08日
    瀏覽(26)
  • 《數(shù)據(jù)結(jié)構(gòu)》課程設計(C/C++版):植物百科數(shù)據(jù)的管理與分析

    目錄 第1關(guān):增加植物信息 第2關(guān):刪除植物信息 第3關(guān):修改植物信息 第4關(guān):基于順序表的順序查找 第5關(guān):基于鏈表的順序查找 第6關(guān):基于順序表的折半查找 第7關(guān):基于二叉排序樹的查找 第8關(guān):基于開放地址法的散列查找 第9關(guān):基于鏈地址法的散列查找 第10關(guān):基于

    2024年04月09日
    瀏覽(401)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包