C语言中的数据结构问题
发布网友
发布时间:2022-04-30 08:32
我来回答
共3个回答
热心网友
时间:2022-06-19 20:31
程序基本上是不错。
你的思路也是对的。
只是算法上有点不清楚!
应该是先把字符,入队和入栈;然后再把出栈的字符
与
出队的字符进行比较,如果完全一致,就说明是匹配的。
只需要把函数compare
调整一下即可。
调整如下,请看注释。
#include
#include
#include
#include
#define
MAXSIZE
100
typedef
char
DataType;
typedef
struct{
DataType
data[MAXSIZE];
int
top;
}SeqStack,*PSeqStack;
typedef
struct{
DataType
data[MAXSIZE];
int
front,rear;
}SeqQueue,*PSeqQueue;
PSeqStack
Init_SeqStack(void)
{
PSeqStack
S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return
S;
}
char
Push_SeqStack(PSeqStack
S,DataType
x)
{
if
(S->top==MAXSIZE-1)
return
0;
else
{
S->top++;
S->data[S->top]=x;
return
1;
}
}
char
Empty_SeqStack(PSeqStack
S)
{
if(S->top==-1)
return
1;
else
return
0;
}
char
Pop_SeqStack(PSeqStack
S,DataType
*x)
{
if(Empty_SeqStack(S))
return
0;
else
{
*x=S->data[S->top];
S->top--;
return
-1;
}
}
PSeqQueue
Init_SeqQueue()
{
PSeqQueue
Q;
Q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(Q)
{
Q->front=0;
Q->rear=0;
}
return
Q;
}
char
Empty_SeqQueue(PSeqQueue
Q)
{
if(Q
&&
Q->front==Q->rear)
return
(1);
else
return
(0);
}
char
In_SeqQueue(PSeqQueue
Q,DataType
x)
{
if((Q->rear+1)%MAXSIZE==Q->front)
{
printf("队满");
return
-1;
}
else
{
Q->rear=(Q->rear+1)%MAXSIZE;
Q->data[Q->rear]=x;
return
1;
}
}
char
Out_SeqQueue(PSeqQueue
Q,DataType
*x)
{
if(Empty_SeqQueue(Q))
{
printf("队空");
return
-1;
}
else
{
Q->front=(Q->front+1)%MAXSIZE;
*x=Q->data[Q->front];
return
1;
}
}
int
compare(char
ch)
{
PSeqStack
S;
char
ch1;
PSeqQueue
Q;
char
ch2;
S=Init_SeqStack();
//初始化
Q=Init_SeqQueue();//初始化
do
{
Push_SeqStack(S,ch);
//入栈
In_SeqQueue(Q,ch);//入队
}while((ch=getchar())!='@');
while(1)
//比较出队和出栈
{
if(Empty_SeqStack(S)==1)
//栈空,则退出循环
break;
Pop_SeqStack(S,&ch1);
//栈不为空,出栈操作,出栈到ch1;
if(Empty_SeqQueue(Q)==1)
//队空,则退出循环
break;
Out_SeqQueue(Q,&ch2);
//队不为空,出队操作,则出队到ch2;
if(ch1
!=
ch2)
//比较,如果不相等,则退出
break;
}
if(ch1==ch2)//比较最后一次的结果
{
printf("匹配");
}
else
{
printf("不匹配");
}
return
0;
}
void
main()
{
char
a;
printf("请输入字符串\n");
scanf("%c",&a);
compare(a);
}
热心网友
时间:2022-06-19 20:31
//既然是算法
就不用源码了
具体看注释
typedef
int
datatype;
typedef
struct
queuenode
{
datatype
data;
struct
queuenode
*next;
}queuenode;
//以上是结点类型的定义
typedef
struct
{
queuenode
rear;
}linkqueue;
//只设一个指向队尾元素的指针
void
initqueue(
linkqueue
&q)
{
//置空队:就是使头结点成为队尾元素
q.rear=(queuenode*)malloc(sizeof(queuenode))
queuenode*
s;
q->rear
=
q->rear->next;//将队尾指针指向头结点
while(q->rear!=q->rear->next)
//当队列非空,将队中元素逐个出队
{
s=q->rear->next;
q->rear->next=s->next;
free(s);
}
//回收结点空间
}
int
emptyqueue(
linkqueue
&q)
{
//判队空
//当头结点的next指针指向自己时为空队
return
q->rear->next->next==q->rear->next;
}
void
enqueue(
linkqueue
&q,
datatype
x)
{
//入队
//也就是在尾结点处插入元素
queuenode
*p=(queuenode
*)
malloc
(sizeof(queuenode));//申请新结点
p->data=x;
p->next=q->rear->next;//初始化新结点并链入
q-rear->next=p;
q->rear=p;//将尾指针移至新结点
}
datatype
dequeue(
linkqueue
&q,datatype
&x)
{
//出队,把头结点之后的元素摘下
datatype
t;
queuenode
*p;
if(emptyqueue(
q
))
error("queue
underflow");
p=q->rear->next->next;
//p指向将要摘下的结点
x=p->data;
//保存结点中数据
if
(p==q->rear)
{
//当队列中只有一个结点时,p结点出队后,要将队尾指针指向头结点
q->rear
=
q->rear->next;
q->rear->next=p->next;
}
else
q->rear->next->next=p->next;//摘下结点p
free(p);//释放被删结点
return
x;
}
热心网友
时间:2022-06-19 20:32
//-------------------------------
//1、
void
main()
{
//
char?字符串?你确信?
char
a;
printf("请输入字符串");
scanf("%c",&a);
compare(a);
}
//-------------------------------
//
2、
int
compare(char
ch)
{
PSeqStack
S;
char
ch1;
S=Init_SeqStack();
Push_SeqStack(S,ch);
//
ch=getchar()?
难道不是ch1=getchar()?下面ch2哪里也是一样
while((ch=getchar())!='@')
{
if(Empty_SeqStack(S))
return
0;
Pop_SeqStack(S,&ch1);
}
PSeqQueue
Q;
char
ch2;
Q=Init_SeqQueue();
In_SeqQueue(Q,ch);
while((ch=getchar())!='@')
{
if(Empty_SeqQueue(Q))
return
0;
Out_SeqQueue(Q,&ch2);
}
strcmp(&ch1,
&ch2);
if(ch1==ch2)
{
printf("匹配");
}
else
{
printf("不匹配");
}
}
C语言数据结构类型定义的问题
在C语言中,结构体struct指的是一种数据结构,是C语言中聚合数据类型aggregate data type的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员member,且这些成员可以为不同的类型,成员一般用名字访问。
C语言版的数据结构问题:数据结构和数据类型的关系?
数据结构 用 struct 定义 比如: struct A {int a, char b, A *p} *pA;那么A属于一个数据结构,a,b,p都属于数据元素。A的初始大小是四个字节,既元素最大的一个的空间。。。里面的成员同时存在,各自有各自的地址,互不干扰。既pA->a,pA->b,pA->p是可以同时存在滴。数据类型 用...
关于数据结构的问题,用C语言描述
一、数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。所以,...
数据结构问题。。。c语言
图二那句void printN(int n)叫做函数申明。main是入口函数,调用printN这个函数。所以,只要确保printN定义在main函数之前,或者是在main调用之前申明。都可以。所以,你可以排成:1、include <stdio.h> void printN(int n){。。。}//把代码放在main前面就不需要申明语句。int main(){ 。。p...
数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...
C语言数据结构问题
即high=mid-1=6。这时有mid=(5+6)/2=5,又因为47<56,需要修改low,使low=6。这时有low=high=6,mid=(6+6)/2=6,有list[mid].key==x.key。所以查找成功。如果下界指针low>上界指针high,则表示表中没有与关键字相等的元素,查找失败。希望对你有帮助!
C语言数据结构的一个基本问题
1 int read_2D_Array(int **array, int i, int j, int column)2 { //i row j column ,总行数为column 3 return((*(int*)array + i*column + j));4 } 以上函数的参数第一行的int **array是函数参数这个参数说明该函数参数列表一接收的数据类型为int ** 型的变量 ...
C语言问题(数据结构)
LNode *p=L->next 定义一个结构体指针p,使其指向L->next中记录的地址,假设L->next中记录的地址为0xA,此时p中的内容就是0xA。注意,这一行为是拷贝,即将L->next中的内容拷贝到p中;L->next=NULL 令L->next=NULL,此时L->next中记录的地址变为0x0,但这一操作并不影响到指针p,p中...
关于数据结构(C语言)的几个题
最多比较次数参考严蔚敏《数据结构》第九章 查找 220页。5.例如图中这棵树,假设i=2,2i=4不大于n,2i+1=5大于n,所以2这个结点没有右子树。6.顺序栈的类型定义:typedef struct{ char *base; //也可用ElemType,只要定义了就行 char *top; int stacksize;}SqStackTp; //...
数据结构的习题(C语言版)
第一个问题,分析下要求,可以知道要做的事情是合并两个数组到一个数组里去,数组C的长度是AB之和。表C的第一个字符不是A的第一个字符就是B的第一个字符。因此接下来要做的事情就是做一个长度为AB之和的循环,每一次找出A或B中的最小元素,存到C里面去,循环结束,C就自动有了。第二个问题...