c语言中堆栈的书籍推荐_c++编程书籍推荐

c语言中堆栈的书籍推荐_c++编程书籍推荐,第1张

强烈建议,《汇编语言》王爽编。这是16位汇编国内最好的一本书。

学了这个其他的就很容易搞明白了。其他的你需要:

《Cprimer中文版》

《 *** 作系统原理》

《windows环境下汇编语言程序设计第2版》(罗云彬编,这个也很不错,也很好懂,《 *** 作系统原理》讲理论的东西,它比《 *** 作系统原理》更加实用)

如果有必要,《计算机组成原理》也可以学学,这是从硬件角度考虑怎么实现CPU和内存的互相 *** 作。

加密:

#include <iostream>

#include <string>

using namespace std;

string encrypt(string text, int key)

{

string ciphertext = "";

int length = textlength();

for(int i=0; i<length; i+=2)

{

int x = text[i] - 'a';

int y = text[i+1] - 'a';

x = (x + key) % 26;

y = (y + key) % 26;

ciphertext += char(x + 'a');

ciphertext += char(y + 'a');

}

return ciphertext;

}

int main()

{

string text = "hello";

int key = 7;

string ciphertext = encrypt(text, key);

cout << "加密后的密文为:" << ciphertext << endl;

return 0;

}

解密:

#include <iostream>

#include <string>

using namespace std;

string decrypt(string ciphertext, int key)

{

string text = "";

int length = ciphertextlength();

for(int i=0; i<length; i+=2)

{

int x = ciphertext[i] - 'a';

int y = ciphertext[i+1] - 'a';

x = (x - key + 26) % 26;

y = (y - key + 26) % 26;

text += char(x + 'a');

text += char(y + 'a');

}

return text;

}

int main()

{

string ciphertext = "olssv";

int key = 7;

string text = decrypt(ciphertext, key);

cout << "解密后的明文为:" << text << endl;

return 0;

}

#include <stdioh>

#include <stdlibh>

#include <stringh>

#define N 100

#define M 2N-1

typedef char HuffmanCode[2M];//haffman编码

typedef struct

{

int weight;//权值

int parent;//父节节点

int LChild;//左子节点

int RChild;//右子节点

}HTNode,Huffman[M+1];//huffman树

typedef struct Node

{

int weight; //叶子结点的权值

char c; //叶子结点

int num; //叶子结点的二进制码的长度

}WNode,WeightNode[N];

/产生叶子结点的字符和权值/

void CreateWeight(char ch[],int s,WeightNode CW,int p)

{

int i,j,k;

int tag;

p=0;//叶子节点个数

//统计字符出现个数,放入CW

for(i=0;ch[i]!='\0';i++)

{

tag=1;

for(j=0;j<i;j++)

if(ch[j]==ch[i])

{

tag=0;

break;

}

if(tag)

{

CW[++p]c=ch[i];

CW[p]weight=1;

for(k=i+1;ch[k]!='\0';k++)

if(ch[i]==ch[k])

CW[p]weight++;//权值累加

}

}

s=i;//字符串长度

}

/创建HuffmanTree/

void CreateHuffmanTree(Huffman ht,WeightNode w,int n)

{

int i,j;

int s1,s2;

//初始化哈夫曼树

for(i=1;i<=n;i++)

{

ht[i]weight =w[i]weight;

ht[i]parent=0;

ht[i]LChild=0;

ht[i]RChild=0;

}

for(i=n+1;i<=2n-1;i++)

{

ht[i]weight=0;

ht[i]parent=0;

ht[i]LChild=0;

ht[i]RChild=0;

}

for(i=n+1;i<=2n-1;i++)

{

for(j=1;j<=i-1;j++)

if(!ht[j]parent)

break;

s1=j; //找到第一个双亲不为零的结点

for(;j<=i-1;j++)

if(!ht[j]parent)

s1=ht[s1]weight>ht[j]weightj:s1;

ht[s1]parent=i;

ht[i]LChild=s1;

for(j=1;j<=i-1;j++)

if(!ht[j]parent)

break;

s2=j; //找到第二个双亲不为零的结点

for(;j<=i-1;j++)

if(!ht[j]parent)

s2=ht[s2]weight>ht[j]weightj:s2;

ht[s2]parent=i;

ht[i]RChild=s2;

ht[i]weight=ht[s1]weight+ht[s2]weight;//权值累加

}

}

/叶子结点的编码/

void CrtHuffmanNodeCode(Huffman ht,char ch[],HuffmanCode h,WeightNode weight,int m,int n)

{

int i,c,p,start;

char cd;

cd=(char )malloc(nsizeof(char));

cd[n-1]='\0';//末尾置0

for(i=1;i<=n;i++)

{

start=n-1; //cd串每次从末尾开始

c=i;

p=ht[i]parent;//p在n+1至2n-1

while(p) //沿父亲方向遍历,直到为0

{

start--;//依次向前置值

if(ht[p]LChild==c)//与左子相同,置0

cd[start]='0';

else //否则置1

cd[start]='1';

c=p;

p=ht[p]parent;

}

weight[i]num=n-start; //二进制码的长度(包含末尾0)

h[i]=(char )malloc((n-start)sizeof(char));

strcpy(h[i],&cd[start]);//将二进制字符串拷贝到指针数组h中

}

free(cd);//释放cd内存

system("pause");

}

/所有字符的编码/

void CrtHuffmanCode(char ch[],HuffmanCode h,HuffmanCode hc,WeightNode weight,int n,int m)

{

int i,k;

for(i=0;i<m;i++)

{

for(k=1;k<=n;k++) /从weight[k]c中查找与ch[i]相等的下标K/

if(ch[i]==weight[k]c)

break;

hc[i]=(char )malloc((weight[k]num)sizeof(char));

strcpy(hc[i],h[k]); //拷贝二进制编码

}

}

/解码/

void TrsHuffmanTree(Huffman ht,WeightNode w,HuffmanCode hc,int n,int m)

{

int i=0,j,p;

printf("StringInformation\n");

while(i<m)

{

p=2n-1;//从父亲节点向下遍历直到叶子节点

for(j=0;hc[i][j]!='\0';j++)

{

if(hc[i][j]=='0')

p=ht[p]LChild;

else

p=ht[p]RChild;

}

printf("%c",w[p]c); /打印原信息/

i++;

}

}

/释放huffman编码内存/

void FreeHuffmanCode(HuffmanCode h,HuffmanCode hc,int n,int m)

{

int i;

for(i=1;i<=n;i++)//释放叶子结点的编码

free(h[i]);

for(i=0;i<m;i++) //释放所有结点的编码

free(hc[i]);

}

void print(Huffman &ht,int i,int space)//打印哈弗曼树

{

int j;

if(i)

{

print(ht,ht[i]RChild,space+5);

for(j=0;j<=space;j++)

printf(" ");

printf("%d\n",ht[i]weight);

print(ht,ht[i]LChild,space+5);

}

return ;

}

void main()

{

int i,n=0; /n为叶子结点的个数/

int m=0; /m为字符串ch[]的长度/

char ch[N]; /ch[N]存放输入的字符串/

Huffman ht; /Huffman二叉数 /

HuffmanCode h,hc; /h存放叶子结点的编码,hc 存放所有结点的编码/

WeightNode weight; /存放叶子结点的信息/

printf("\n");

printf(" 欢迎使用哈弗曼编码解码系统\n");

printf("\n");

printf("\tHuffmanCoding\n");

printf("please input information :");

gets(ch); /输入字符串/

CreateWeight(ch,&m,weight,&n); /产生叶子结点信息,m为字符串ch[]的长度/

printf("WeightInformation\n Node ");

for(i=1;i<=n;i++) /输出叶子结点的字符与权值/

printf("%c ",weight[i]c);

printf("\nWeight ");

for(i=1;i<=n;i++)

printf("%d ",weight[i]weight);

CreateHuffmanTree(ht,weight,n); /产生Huffman树/

printf("\nHuffamnTreeInformation\n");

printf("\ti\tweight\tparent\tLChild\tRChild\n");

for(i=1;i<=2n-1;i++) /打印Huffman树的信息/

printf("\t%d\t%d\t%d\t%d\t%d\n",i,ht[i]weight,ht[i]parent,ht[i]LChild,ht[i]RChild);

CrtHuffmanNodeCode(ht,ch,h,weight,m,n); /叶子结点的编码/

printf(" NodeCode\n"); /打印叶子结点的编码/

for(i=1;i<=n;i++)

{

printf("\t%c:",weight[i]c);

printf("%s\n",h[i]);

}

CrtHuffmanCode(ch,h,hc,weight,n,m); /所有字符的编码/

printf("StringCode\n\n"); /打印字符串的编码/

for(i=0;i<m;i++)

printf("%s",hc[i]);

system("pause");

TrsHuffmanTree(ht,weight,hc,n,m); /解码/

FreeHuffmanCode(h,hc,n,m);

printf("\n");

printf("\n哈弗曼树\n");

print(ht,2n-1,0);

system("pause");

}

以上就是关于c语言中堆栈的书籍推荐_c++编程书籍推荐全部的内容,包括:c语言中堆栈的书籍推荐_c++编程书籍推荐、c语言程序设计、赫夫曼OR哈弗曼编码 c语言 数据结构 简单的程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9457075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存