链栈的回文函数c语言程序 用栈实现回文数

用链栈和链队判断回文数

#include string.h

成都创新互联公司成立于2013年,先为榆树等服务建站,榆树等地企业,进行企业商务咨询服务。为榆树企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

#include stdio.h

#define MAXSIZE 100

typedef struct {

char data[MAXSIZE];

int top;

}seqstack; seqstack *init_seqstack(){

seqstack *s;

s=malloc(sizeof(seqstack));

s-top=-1;

return s;

} void inputstack(seqstack *s,char x){

if(s-top==MAXSIZE-1)

{ printf("The stack is full!");

return;

}

else

{ s-top++;

s-data[s-top]=x;

}

}int outputstack(seqstack *s){

int n;

n=s-top;

for(;s-top=n/2;s-top--){

if( s-data[s-top]!=s-data[n-s-top]) break;

}

if(s-top=n/2)

return 0;

else

return 1;

}

void main()

{ int flag=1,n=0;

char x;

seqstack *s;

s=init_seqstack(); while(flag)

{

scanf("%c",x);

if(x=='#')

{ flag=0; if(outputstack(s))

printf("yes!");

else

printf("no!");

}

if(x!='\n'){

inputstack(s,x);}

} getch();

}

C语言 数据结构 , 用链式队列和链式栈 判断一个字符串是否为回文

#include stdio.h

#include string.h

#include stdlib.h

const MaxStackSize = 50;

typedef char ElemType;

typedef struct snode {

ElemType data;

struct snode *next;

}*LinkStack,*psNode;

LinkStack GetEmptyStack() { // 初始化

LinkStack head = (psNode)malloc(sizeof(struct snode));

if((head) == NULL) {

printf("内存空间不足无法插入!\n");

return NULL;

}

head-data = '0';

head-next = NULL;

return head;

}

int StackNotEmpty(LinkStack head) { // 是否为空

return (head-next != NULL);

}

int StackPush(LinkStack head,ElemType x) { // 入栈

psNode p = (psNode)malloc(sizeof(struct snode));

if(p == NULL) {

printf("内存空间不足无法插入!\n");

return 0;

}

p-data = x;

p-next = head-next;

head-next = p;

return 1;

}

int StackPop(LinkStack head,ElemType *x) { //删除元素(弹出)

psNode p = head-next;

if(StackNotEmpty(head)) {

*x = p-data;

head-next = p-next;

free(p);

return 1;

}

return 0;

}

typedef struct qnode  { // 队列

ElemType data;

struct qnode *next;

}*pqNode;

typedef struct queue{

pqNode front;

pqNode rear;

}*LinkQueue;

LinkQueue GetEmptyQueue() { //初始化

LinkQueue Q = (struct queue *)malloc(sizeof(struct queue));

if(Q == NULL) {

printf("内存空间不足无法插入!\n");

return NULL;

}

Q-rear = NULL;

Q-front = NULL;

return Q;

}

int QueueNotEmpty(LinkQueue Q) { //是否为空

return (Q-front != NULL);

}

int QueueAppend(LinkQueue Q,ElemType x) { //入队列

struct qnode *p = (struct qnode *)malloc(sizeof(struct qnode));

if(p == NULL) {

printf("内存空间不足!\n");

return 0;

}

p-data = x;

p-next = NULL;

if(Q-front == NULL) // 队列为空

Q-front = Q-rear = p;

else {

Q-rear-next = p;

Q-rear = p;

}

return 1;

}

int QueueDelete(LinkQueue Q,ElemType *d) { //出队列(删除)

pqNode p;

if(QueueNotEmpty(Q)) {

*d = Q-front-data;

p = Q-front;

Q-front = p-next;

if(p-next == NULL) Q-rear = NULL;

free(p);

return 1;

}

printf("队列已空无数据出队列!\n");

return 0;

}

typedef struct sqstack { //顺序栈(进制)

ElemType stack[MaxStackSize];

int size;

}SequenceStack;

void StackInitiate(SequenceStack *S) {

S-size = 0;

}

int StackNotEmpty(SequenceStack *S) {

return (S-size  0);

}

int StackPush(SequenceStack *S,ElemType x) {

if(S-size = MaxStackSize) {

printf("堆栈已满无法插入!\n");

return 0;

}

S-stack[S-size] = x;

++S-size;

return 1;

}

int StackPop(SequenceStack *S,ElemType *d) {

if(S-size == 0) {

printf("堆栈已空!\n");

return 0;

}

--S-size;

*d = S-stack[S-size];

return 1;

}

int main() { //主函数在这里

LinkStack head = GetEmptyStack();

LinkQueue Q = GetEmptyQueue();

// SequenceStack myStack;

char x,d;

int i = 0,flag;

char str[MaxStackSize];

printf("输入字符串:");

scanf("%s",str);

while(str[i]) {

StackPush(head,str[i]);

QueueAppend(Q,str[i]);

++i;

}

while(StackPop(head,x)  QueueDelete(Q,d)  flag)

flag = (x == d);

if(flag) printf("是回文!\n");

else printf("不是回文!\n");

return 0;  

}

求编程高手用c语言编写链栈完整源代码

/****************************************************************************************

实现链栈各种基本运算的算法 *

编写程序实现链栈种基本运算,并在此基础上设计一个主程序完成如下功能:

1、 初始化栈

2、 判断栈是否为空

3、 依次进栈a,b,c,d,e元素。

4、 判断栈是否为空

5、 输出栈的长度

6、 输出从栈顶到栈底元素

7、 输出出栈序列

8、 判断栈是否为空

9、 释放栈/

*********************************************************************************************/

#includeiostream.h

#includestdlib.h

#includestdio.h

#define OVERFLOW -2

#define ok 1

#define STACK_INIT_SIZE 100 //存储空间初始分配量

#define STACKCREMENT 10 //增加分量

typedef struct{

char *base;

char *top;

int stacksize;//当前分配的空间

int lenght;

}SqStack; //Sqlist

/*********************************初始化栈*************************************/

int InitStack(SqStack S)

{

S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));// 分配存储空间

if(!S.base) exit(0);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

S.lenght=0;

return 1;

}

/******************************************************************************/

/********************************判断栈是否为空******************************/

bool StackEmpty(SqStackS){

if(S.top==S.base)return 1;

else

return 0;

}

/*****************************释放栈********************************/

int FreeStack(SqStackS)

{

free(S.base);

S.top=S.base;

return ok;

}

/******************************************************************/

/*********************求出栈的长度*********************************/

int StackLenth(SqStackS){

S.lenght=S.top-S.base;

return S.lenght;

}

/******************************************************************/

/**********************入栈*****************************************/

int Push(SqStack S,char e){

if(S.lenght=S.stacksize){

S.base=(char*)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(char));//增加分配存储

if(!S.base) exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKCREMENT;

}

*S.top++=e;

S.lenght++;

return ok;

}

/**************************************************************/

/****************************出栈****************************/

char Pop(SqStackS,char e){

if(S.base==S.top)

return 0; //当栈为空时,返回错误

else

e=*--S.top;

S.lenght--;

return e;

}

/*************************显示*******************************/

void DispStack(SqStack S)

{

int i;

for(i=S.lenght;i0;i--)

{

printf("%c",*(--S.top));

}

printf("\n");

}

//*******************主函数************************************/

int main(){

int i;

SqStack Lst;

char a,b,c,d,e,f;

char g;

printf("初始化栈:\n");

InitStack(Lst);

printf("依次进栈元素a,b,c,d,e,f\n");

cinabcdef;

Push(Lst,a);

Push(Lst,b);

Push(Lst,c);

Push(Lst,d);

Push(Lst,e);

Push(Lst,f);

printf("打印\n");

DispStack(Lst);

int l=StackLenth(Lst);

cout"栈的长度为"lendl;

printf("出栈序列:");

for(i=1;i=6;i++)

{

Pop(Lst,g);

printf("%c ",g);

}

printf("\n");

printf("栈为:%s\n",(StackEmpty(Lst)?"空":"非空"));

printf("释放栈\n");

FreeStack(Lst);

return 0;

}

可以正确运行,你看下可以不??希望能帮到楼主! 我用visual C++6.0编译的,现在主流都是用这个,不好意思,WINTC我没有用过,楼主可以自己改吗??

额,你们老师太不人道了,WINTC好像在后面得加一个getch()吧??这个软件我没有用过


当前标题:链栈的回文函数c语言程序 用栈实现回文数
转载注明:http://myzitong.com/article/dosccoo.html