链栈的回文函数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