数据结构c语言版题
栈先进后出,队列先进先出,队列的顺序等价于栈的出栈顺序。写了个简单的验证程序,初始的出栈顺序必须无误
#include<iostream>
usingstd::cout;
//iStack元素值有序,简化了编程,否则就要借助于下标的有序性
//'g'作为一个额外的标记,取到此值时,表示所有元素都已入栈
chariStack[]={'a','b','c','d','e','f','g'};
charoStack[]={'b','d','f','e','c','a'};
intno=1;
//sp用于指示iStack未入栈的元素
intsp=0;
charTop()
{
returniStack[sp];
}
//ch及之前元素入栈
voidPush(charch)
{
charcc=Top();
while(cc<=ch)
{
printf("(%2d)Push: %c
",no++,cc);
sp++;
cc=Top();
}
}
voidPop(charch)
{
if(ch>=Top()) //当前要出栈的元素未入栈
Push(ch);
printf("(%2d)Pop: %c
",no++,ch);
}
intmain()
{
intcount=0;
intlen=sizeof(oStack);
//1
printf("入栈顺序:
");
for(inti=0;i<len;i++)
printf("%c",iStack[i]);
printf("
");
//2
printf("出栈顺序:
");
for(inti=0;i<len;i++)
printf("%c",oStack[i]);
printf("
");
//3
printf("出入栈操作:
");
while(count<len)
{
Pop(oStack[count]);
count++;
}
return0;
}
Ⅱ 求助数据结构题用C语言做
1: 因为要删除那些即在B表又在C表中的元素,所以A,B,C三个表中都会有这个元素。那么用指针遍历A表,用另外两个指针遍历B,C。查找B,C中同A的元素,因为3个表都是有序的,可以采用些简单的比较。找到后删除。
2:void AE(stack &s)
{
int stack (s); //得到传递过来的栈
push(s,3); // 3进栈
push(s,4); // 4进栈
int x=pop(s)+2*pop(s); // x = 3 + 2 * 4
push(s,x); // x 进栈
int a[5]={2,5,8,22,15};
for(j=0;j<5;j++)
push(s,a[i]) // A数组进栈
while(!stackempty(s)) // 直到栈空
printf("%d",2*pop(s)); //输出 2*栈中每个元素
结果自己想了。
Ⅲ 数据结构(c语言版)题目求答案
3.28
void InitCiQueue(CiQueue&Q)//初始化循环链表表示的队列Q
{
Q=(CiLNode*)malloc(sizeof(CiLNode));
Q->next=Q;
}//InitCiQueue
voidEnCiQueue(CiQueue&Q,int x)//把元素x插入循环列表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队尾元素
{
p=(CiLNode*)malloc(sizeof(CiLNode));
p->data=x;
p->next=Q->next;//直接把p加在Q的后面
Q->next=p;
Q=p;//修改尾指针
}
Status DeCiQueue(CiQueue&Q,int x)//从循环链表表示的队列Q头部删除元素x
{
if(Q==Q->next)return INFEASIBLE;//队列已空
p=Q->next->next;
x=p->data;
Q->next->next=p->next;
free(p);
rturn OK;
}//DeCiqueue
3.31
int Palindrome_Test()
{
InitStack(S);InitQueue(Q);
while((c=getchar())!='@')
{
Push(S,c);EnQueue(Q,c);
}
while(!StackEmpty(S))
{
pop(S,a);DeQueue(Q,b);
if(a!=b)return ERROR;
}
return OK;
}
Ⅳ 关于数据结构(C语言)的几个题
1.
voidconverse(intn,intd){
SqStackS;//新旦顷搭建一个栈
InitStack(S);//初始化栈
intk,e;
while(n>0){
k=n%d;
push(S,k);
n=n/d;
}//将余数进栈
while(S.top!=S.base){
模拿pop(S,e);
printf("%1d",e);
}//输出结果
}
8.
先序遍历:ABCDEF
中序遍历:BCDAFE
后序遍历:DCBFEA