データ構造復習:線形表を復習する.スタック&キュー


データ構造を再学習する線形表:1.砂彫り解読2.判断回文*************************************************************************************************************************************************************************************************************************************************************************************************************************************行列沙雕解密:今、ある女子学生が暗号化された数列をくれました.そして、各数を1番、2番、3番と見なしています.数列は私に復号する必要があるので、復号するには以下の規則に従う必要があります:1号数を削除して、2号数を末尾に置きます;3番目の番号を削除し、4番目の番号を末尾に配置します.これによって行います.すべての数が操作されるまで、最後の数列は復号された数列です.暗号化数は、35122029342210として知られています.現在、コードの復号化と暗号化が要求されており、後でその学生と感情をよく交流することができます.ここの教科書の中の方式はキューで解読を実現します:(キューを使わないと特に簡単で、ここは復習のために書くのが多いだけです)
	#include 
	#include 
	using namespace std;

	struct queue{
		char data[1000];
		int bottom;
		int top;
	}secret; 

	void init()
	{
		cout << "       ,      :" << endl; 
		cin >> secret.data;
		secret.bottom=0;
		secret.top=strlen(secret.data)-1;
	}

	void print()
	{
		cout << "    !" << endl << "   :" << endl;
		while(secret.bottom <= secret.top)
		{
			cout << secret.data[secret.bottom] ;
			secret.bottom++;
		}
	}

	void decipher(int k)
	{
		while(secret.bottom <= k)
		{
			secret.bottom += 1;
			secret.top += 1;
			secret.data[secret.top] = secret.data[secret.bottom];
			secret.bottom += 1;
		}
	}

	int main()
	{
		int i,k;
		init();
		k=secret.top;
		decipher(k);
		print();
		return 0;
	}

(2)暗号化:(c,キューなし)
	#include 
	#include 
	#include 
	#include 
	void encript(char str[],int len)
	{
		char c[1000];
		int i=0,j;
		char a;
		for(j=0;j < len;j++)
		{
			a= 48 + rand()%10;
			c[i++]=a;
			c[i++]=str[j];
		}
		for(j=i-1;j > 0;j-=2)
		{
			printf("%c%c",c[j-1],c[j]);
		}
		printf("
"); } int main() { char str[1000]; int len; char a; printf(" , :
"); scanf("%s",str); len = strlen(str); system("cls"); printf(" , :
"); for(int i=0;i < len;i++) printf("*"); printf("
"); printf(" :
"); for(int j=0;j < len;j++) { a= 48 + rand()%10; printf("%c",a); printf("%c",str[j]); } return 0; }

********2.仓库復号メッセージ:(c)
単純な点のために,スタック入力文字列を構造体方式で定義せず,返信であるか否かを判断する.
#include 
	#include 
	int main()
	{
		char a[101],s[101];
		int i,len,mid,next,top;
		gets(a); 
		len=strlen(a); 
		mid=len/2-1; 
		top=0;
		for(i=0;i<=mid;i++)
		s[++top]=a[i];
		if(len%2==0)
		next=mid+1;
		else
		next=mid+2;
		for(i=next;i<=len-1;i++)
		{
				if(a[i]!=s[top])
				break;
				top--;
		}
		if(top==0)
		printf("YES");
		else
		printf("NO");
		getchar();
		getchar();
		return 0;
	}