1、区块链(必做)(链表)

1、区块链(必做)(链表)

[问题描述]

使用链表设计一个保存信息的系统,该系统拥有类似区块链的设计以防止信息被轻易篡改。

该题目使用一个链表。信息保存在链表的每一个节点中,每个节点需要包含该节点的编号、信息和校验码。其中:

+ 每个节点的编号按照顺序递增,从0开始。

+ 节点中包含的信息是字符串,且每个字符的ASCII码范围为0-127,以\0结束。

+ 每个节点的校验码等于上一个节点的校验码+本节点的节点编号+本节点信息中字符串ASCII码之和 mod 113。

+ 首个节点的校验码则是本节点信息中字符串ASCII码之和 mod 113。

+ 有效的链表要求所有节点的校验码都能够成功按照上述算法得出。

[基本要求]

(1)要求从文本文件中输入;

(2)给定链表,检查链表是否有效。若无效,输出首个无效节点的节点编号;

(3)允许向链表中添加信息,要求保证链表始终有效;

(4)篡改一个有效的链表中特定编号的节点信息内容,保持篡改后的链表仍然有效。注意,可能需要篡改多个节点以达到此要求。

 

#include 
#include 
#include 
#include 
#include
#include
#include
#include#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0#define MAXSIZE 128
#define QSIZE 128
#define QINCREMENT 128using namespace std;typedef string DataType; 
typedef int ElemType;
typedef int Status;const char *fileName = "text1.txt";typedef struct LNode{int order_node;DataType data;int check_node;struct LNode *next;	
}LNode,*LinkList;typedef struct SListInfo{LinkList head;LinkList tail;LNode *pCurNode;int length;
}SListInfo;Status ListLength(LinkList L){//单链表长度int n=0;LNode *p;p = L->next;while (p){n++;p = p->next;}return n;
}string st = "";Status InitList(LinkList &L){//初始化单链表 L = (LNode*) malloc (sizeof(LNode));if(L == NULL) exit(OVERFLOW);L->next = NULL;
//	L->data = st;
//	L->order_node = 0;
//	L->check_node = 0;return OK; 
}Status FirstInsert(LinkList &L){L->data = st;L->order_node = 0;L->check_node = 0;
}Status InsertElem(LinkList &L, int i, DataType e){	//在第i个位置插入eLNode *s =(LNode*)malloc(sizeof(LNode));    //申请新的节点if(s == NULL)	exit(0);    //申请节点失败 for(int j = 0; j data = e;} LNode *p;p = L->next;if(i == 1){s->next = p;L->next = s;}else if(i>1  &&  i <= ListLength(L)){for(int j = 0;jnext;}s->next = p->next;p->next = s;}else if(i == ListLength(L)+1){for(int j = 0;jnext;}p->next = s;s->next = NULL;}else{cout<<"No Position"<>len;
/*fstream readFile;char input[MAXSIZE];readFile.open("text1.txt",ios::in);if(readFile.fail()){cout<<"open fail"<>e;
//		InsertElem(L,i,e);
//	}
//	cout<data = str;L->order_node = ord;int sum = 0;for(int i = 0; i < L->data.length(); i++) {sum += L->data[i];}L->check_node = ( L->order_node + sum + after)%113;after = L->check_node;cout<order_node<<" "<check_node<next;
//	L->order_node++;
//	CheckNode(L,str);
//	return 0;
}int main()
{LinkList L;InitList(L);string s;int num = 0;int length;//	cout<<"scanf len 3 for test"<>length;CreateList(L);	fstream readFile;char input[MAXSIZE];readFile.open("text1.txt",ios::in);if(readFile.fail()){cout<<"open fail"<next;cout<data<order_node<data);L = L->next;L->order_node +=1;CheckNode(L,L->data);L = L->next;L->order_node +=1;CheckNode(L,L->data);
*/for(int i = 0; i < length; i++){L = L->next;L->order_node == i;CheckNode(L,L->data,i);}//	cout<data[i] = tmp;
//		cout<order_node = first;std::ifstream file(fileName);char buff[1024];
/*	while(file.getline(buff,1024)){for(int i = 0; i <1024; i++){char tmp = buff[i];if(tmp == '\0'){break;}L->data[i] = tmp;}}file.open(fileName,ios::in);for(int i = 0;i data[i] = tmp;}int sum1 = 0;for(int k = 0;k < L->data.length();k++){sum1 += L->data[k];}L->check_node = (0 + L->order_node + sum1 + after)%113;after = L->check_node;L = L->next;CheckNode1(L);
//	return L->chack_node;
}*/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部