急!在线等!两道数据结构的C语言基础题!!

编程序判断一个字符序列是否回文,要求只使用堆栈,不使用序列。利用堆栈进行单链表就地逆置,即利用原单链表的结点空间,把数据元素序列(a0,a1,,...,an-1)逆置为(... 编程序判断一个字符序列是否回文,要求只使用堆栈,不使用序列。

利用堆栈进行单链表就地逆置,即利用原单链表的结点空间,把数据元素序列(a0,a1,
,...,an-1)逆置为(an-1,...,a1,a0)

要求给现成的代码,谢了!
我要的是C语言!!!两道题!!!!只回答我的问题啊,注明哪个是哪个,需要是原创的,谢了啊
展开
 我来答
lxm930721
2012-11-03
知道答主
回答量:12
采纳率:0%
帮助的人:13万
展开全部
第一题:
#include<stdio.h>
#include<malloc.h>
#define null 0
#define max 50
typedef struct sn
{
char data;
struct sn *next;
} node;
int ishw(node *head,int n)
{
char stack[max];
int top=0;
node *p;
p=head->next;
while(top<n/2)
{
stack[top]=p->data;
top++;
p=p->next;
}
top--;
if(n%2==1) p=p->next;
while(top>=0)
{
if(stack[top]!=p->data) return 0;
top--;
p=p->next;
}
return 1;
}
int push(node *head,char *s)
{
int i;
node *p,*q;
p=head;
for(i=0; s[i]!='\0'; i++)
{
q=(node *)malloc(sizeof(node));
q->data=s[i];
q->next=null;
p->next=q;
p=q;
}
return(i);
}
void main()
{
char s[max];
node *head;
int i;
printf("请输入一串字符(最大个数:%d):",max);
scanf("%s",s);
head=(node *)malloc(sizeof(node));
i=push(head,s);
if(ishw(head,i))
printf("它是回文数\n");
else
printf("它不是回文数\n");
system("PAUSE");
return 0;
}

第二题:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct String
{
char s[100];
} StringType;
typedef StringType DataType;
typedef struct snode
{
DataType data;
struct snode *next;
} LSNode;
void StackInitiate(LSNode **head)//初始化堆栈
{
*head=(LSNode *)malloc(sizeof(LSNode));
(*head)->next=NULL;
}
int StackNotEmpty(LSNode *head)//判断堆栈非空
{
if(head->next==NULL)return 0;
else return 1;
}
int StackPush(LSNode *head,DataType x)//入栈
{
LSNode *p;
p=(LSNode *)malloc(sizeof(LSNode));
p->data=x;
p->next=head->next;
head->next=p;
return 0;
}
int StackPop(LSNode *head,DataType *d)//出栈
{
LSNode *p=head->next;
head->next=p->next;
*d=p->data;
free(p);
return 0;
}
int main(void)
{
LSNode *head;
int n;
int i;
DataType x;
StackInitiate(&head);
printf("请输入单链表个数:");
scanf("%d",&n);
printf("请输入每个栈的内容,并以回车分开\n");
for(i=0; i<n; i++)
{
scanf("%s",x.s);
StackPush(head,x);
}
printf("逆置后:\n");
while(StackNotEmpty(head))
{
StackPop(head,&x);
printf("%s\n",x.s);
}
system("PAUSE");
return 0;
}

经本人测试过,正确。
联腾科技
2025-08-05 广告
深圳市联腾科技有限公司成立于2005年,集研发、生产公共安全信息化产品、LED显示及工程服务为一体的专业化高新技术企业。相关部门于2013年向联腾科技下达技术研发任务,研发的“人员基础信息采集设备”于2016年完成定审列装,列装型号PJS0... 点击进入详情页
本回答由联腾科技提供
72233635
2012-11-02 · TA获得超过465个赞
知道小有建树答主
回答量:673
采纳率:100%
帮助的人:222万
展开全部
我才初一也,不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式