最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言如何用順序棧實(shí)現(xiàn)回文序列判斷

 更新時間:2021年10月15日 16:00:51   作者:正在學(xué)c的小白  
這篇文章主要為大家介紹了C語言如何用順序棧來實(shí)現(xiàn)回文序列的判斷,文中含有詳細(xì)的代碼示例及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助

我是采用了兩個棧值得比較大小判斷得(可能比較浪費(fèi)空間但是代碼我感覺簡單一點(diǎn))

首先是定義一個棧的結(jié)構(gòu)元素,由于是字符串類型就直接定義一個char的數(shù)組就可以:.

typedef struct stack
{
    char data[MAX_SIZE];      //儲存字符串// 
    int top;                  //記錄棧頂// 
}SeqStack;

下來就是初始化,我這里是用的耿國華老師的方法就直接給一個top元素指向棧頂,傳入的指針地址:.

void Initstack(SeqStack *S)   //初始化棧,讓top指向棧頂// 
{
	S->top=-1;
}

下面就是創(chuàng)建順序棧了,元素只要沒滿就一直可以入住:

int Push(SeqStack *S,char x)  //壓棧,只要top小于MAX_SIZE-1就可以繼續(xù)入棧// 
{
	if(S->top<=MAX_SIZE-1)
	{
	S->top++;
	S->data[S->top]=x;
    }else{
    	return -1;;
	}
}

下面是核心函數(shù),操作實(shí)現(xiàn)回文序列的判斷,我注釋的比較清楚直接看就可以了:

void Pop(SeqStack *S)        //出棧操作,也是最主要的操作// 
{
	SeqStack *p;                       
	p=(SeqStack*)malloc(sizeof(SeqStack));  //建立一個新的空棧,由于是指針類型要分配動態(tài)地址//
	Initstack(p);                           //給新的棧進(jìn)行初始化// 
	int i=S->top/2;                         //i用來分割兩個字符串,將第二個字符串賦給新的空棧// 
	int j=i-1;                              //j用來記錄除了@之外的其他字符數(shù)量大小// 
	while(S->top!=i)                        //開始對空棧進(jìn)行賦值,對原來的棧開始清空(清空一般大小)// 
	{
		p->top++;
		p->data[p->top]=S->data[S->top];
		S->top--;
    }
    S->top=S->top-2;                        //讓原來的棧直接指向數(shù)字,跨過了字符@// 
    for(int k=0;k<i-1;k++)                  //循環(huán)次數(shù)由i-1決定,也就是出去@字符之后的其他需要比較的字符// 
    {
    	if(S->data[S->top]==p->data[p->top])  //由于棧的特點(diǎn)先進(jìn)后出,所以新棧的存儲順序和去掉@字符之后的舊棧的存儲順序是一樣的,所以這里直接比較// 
    	{
    		j--;                             //j是定義需要比較字符的大小,只要兩個棧的元素ASCLL相等j就減一,如果全部相等j為0,該字符串就是互為回文序列// 
		}
		S->top--;                            //兩個top指針向下值// 
    	p->top--;
		if(j==0)                         //判斷// 
		{
			printf("兩個字符串互為回文序列!");
		}
	}
	if(j!=0)
	{
		printf("兩個字符串不互為回文序列!");
	}
	free(p);                       //free掉分配的空間// 
}

下面附上整個代碼:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
typedef struct stack
{
    char data[MAX_SIZE];      //儲存字符串// 
    int top;                  //記錄棧頂// 
}SeqStack;
void Initstack(SeqStack *S)   //初始化棧,讓top指向棧頂// 
{
	S->top=-1;
}
int Push(SeqStack *S,char x)  //壓棧,只要top小于MAX_SIZE-1就可以繼續(xù)入棧// 
{
	if(S->top<=MAX_SIZE-1)
	{
	S->top++;
	S->data[S->top]=x;
    }else{
    	return -1;;
	}
}
void Pop(SeqStack *S)        //出棧操作,也是最主要的操作// 
{
	SeqStack *p;                       
	p=(SeqStack*)malloc(sizeof(SeqStack));  //建立一個新的空棧,由于是指針類型要分配動態(tài)地址//
	Initstack(p);                           //給新的棧進(jìn)行初始化// 
	int i=S->top/2;                         //i用來分割兩個字符串,將第二個字符串賦給新的空棧// 
	int j=i-1;                              //j用來記錄除了@之外的其他字符數(shù)量大小// 
	while(S->top!=i)                        //開始對空棧進(jìn)行賦值,對原來的棧開始清空(清空一般大小)// 
	{
		p->top++;
		p->data[p->top]=S->data[S->top];
		S->top--;
    }
    S->top=S->top-2;                        //讓原來的棧直接指向數(shù)字,跨過了字符@// 
    for(int k=0;k<i-1;k++)                  //循環(huán)次數(shù)由i-1決定,也就是出去@字符之后的其他需要比較的字符// 
    {
    	if(S->data[S->top]==p->data[p->top])  //由于棧的特點(diǎn)先進(jìn)后出,所以新棧的存儲順序和去掉@字符之后的舊棧的存儲順序是一樣的,所以這里直接比較// 
    	{
    		j--;                             //j是定義需要比較字符的大小,只要兩個棧的元素ASCLL相等j就減一,如果全部相等j為0,該字符串就是互為回文序列// 
		}
		S->top--;                            //兩個top指針向下值// 
    	p->top--;
		if(j==0)                         //判斷// 
		{
			printf("兩個字符串互為回文序列!");
		}
	}
	if(j!=0)
	{
		printf("兩個字符串不互為回文序列!");
	}
	free(p);                       //free掉分配的空間// 
}
int main()
{
	SeqStack S;
	char x;
	int m=0;
	Initstack(&S);
	printf("請輸入第一串字符\n");
	while(m!=2)                            //因?yàn)橹恍枰斎雰蓚€字符串的判斷,判斷條件為m!=2// 
	{
	    scanf("%c",&x);
	    if(x=='@')                           //輸入@后表明第一個字符串結(jié)束// 
	    {
	    	m++;
	        if(m==1)
	        {
	        	printf("請輸入第二串字符:\n");
	     	}
    	}
     	Push(&S,x);
    }
    Pop(&S);
	return 0;
}

下面加一個例子:

判斷3+1與1+3是否為回文序列

以上就是C語言如何用順序棧實(shí)現(xiàn)回文序列判斷的詳細(xì)內(nèi)容,更多關(guān)于C語言順序棧實(shí)現(xiàn)回文序列判斷的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++11中異常處理機(jī)制詳解

    C++11中異常處理機(jī)制詳解

    傳統(tǒng)的C語言處理異常的方式有兩種:終止程序和返回錯誤碼。在實(shí)際中的C語言程序基本都是通過返回錯誤碼的方式來處理錯誤的,部分情況下使用終止程序來處理比較嚴(yán)重的錯誤。本文將通過示例和大家聊聊C++11中異常處理機(jī)制,需要的可以參考一下
    2022-09-09
  • C++實(shí)例詳解lambda表達(dá)式的使用

    C++實(shí)例詳解lambda表達(dá)式的使用

    Lambda表達(dá)式是現(xiàn)代C++在C ++ 11和更高版本中的一個新的語法糖 ,在C++11、C++14、C++17和C++20中Lambda表達(dá)的內(nèi)容還在不斷更新。 lambda表達(dá)式(也稱為lambda函數(shù))是在調(diào)用或作為函數(shù)參數(shù)傳遞的位置處定義匿名函數(shù)對象的便捷方法
    2022-05-05
  • C++炸彈小游戲示例代碼

    C++炸彈小游戲示例代碼

    這篇文章主要介紹了C++炸彈小游戲,本文給大家分享游戲代碼,代碼簡單易懂通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實(shí)現(xiàn)代碼

    C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實(shí)現(xiàn)代碼

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)之鏈表實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • C語言編程簡單卻重要的數(shù)據(jù)結(jié)構(gòu)順序表全面講解

    C語言編程簡單卻重要的數(shù)據(jù)結(jié)構(gòu)順序表全面講解

    這篇文章主要為大家介紹了C語言編程中非常簡單卻又非常重要的數(shù)據(jù)結(jié)構(gòu)順序表的全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C++?this原理與可變參數(shù)及友元函數(shù)友元類分步詳解用法

    C++?this原理與可變參數(shù)及友元函數(shù)友元類分步詳解用法

    可變參數(shù)模板(variadic?templates)是C++11新增的強(qiáng)大的特性之一,它對模板參數(shù)進(jìn)行了高度泛化,能表示0到任意個數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++?this原理與可變參數(shù)及友元函數(shù)友元類
    2022-11-11
  • C語言基于考研的棧和隊(duì)列

    C語言基于考研的棧和隊(duì)列

    這篇文章主要介紹了考研時的C語言中的堆棧和隊(duì)列的相關(guān)資料,需要的朋友可以參考下,小編覺得這篇文章寫的很好,希望能給你帶來幫助
    2021-08-08
  • C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)

    C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)

    Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)

    Clion2020增加了很多新特性,修復(fù)了大量bug,大大提高了開發(fā)效率。這篇文章主要介紹了Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows),需要的朋友可以參考下
    2020-11-11
  • c++中為什么不提倡使用vector示例詳解

    c++中為什么不提倡使用vector示例詳解

    這篇文章主要給大家介紹了關(guān)于c++中為什么不提倡使用vector的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

甘谷县| 余干县| 定结县| 久治县| 抚远县| 高密市| 阿城市| 修水县| 息烽县| 汝州市| 尼勒克县| 洛扎县| 图片| 大足县| 高邮市| 西宁市| 盈江县| 开化县| 宣威市| 军事| 滦平县| 叶城县| 巴南区| 开远市| 黄龙县| 延川县| 饶阳县| 乡城县| 剑河县| 定襄县| 江都市| 翁牛特旗| 寻乌县| 榆社县| 尤溪县| 盘锦市| 汉川市| 宜阳县| 民勤县| 开封市| 武乡县|