正文
c语言数据结构队列主函数 数据结构队列代码c语言
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言数据结构栈的主函数怎么调用?主函数怎么写?下面是栈的部分程序,帮忙把主函数不出来吧
你这是数据结构中的队列问题,而不是栈的问题。head代表的是队列头,删除时删的是队列头元素,tail代表的是队列尾,插入时插的是队列尾元素
程序中这条语句是错误的。中括号只有一半,那一半呢? *p_y=qp++head];
至于要求的主函数,如果是队列问题还要涉及的是一般队列还是循环队列,因此没法写给你。
数据结构(使用C语言)队列
对顺序循环队列c语言数据结构队列主函数,常规c语言数据结构队列主函数的设计方法是使用队尾指针和队头指针c语言数据结构队列主函数,队尾指针用于指出当前胡队尾位置下标,队头指针用于指示当前队头位置下标。现要求c语言数据结构队列主函数:
(1)设计一个使用队头指针和计数器胡顺序循环循环队列抽象数据类型,其中包括:初始化,入队列,出队列,取队头元素肯判断队列是否非空;
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
#define MAX 80
typedef struct
{
int data[MAX];
int front,rear;
int num;
}SeQue;
SeQue *Init_SeQue()
{
SeQue *s;
s=new SeQue;
s-front=s-rear=MAX-1;
s-num=0;
return s;
}
int Empty_SeQue(SeQue *s)
{
if(s-num==0)
return 1;
else
return 0;
}
int In_SeQue(SeQue *s,int x)
{
if(s-num==MAX)
return 0;
else
{
s-rear=(s-rear+1)%MAX;
s-data[s-rear]=x;
s-num++;
return 1;
}
}
int Out_SeQue(SeQue *s,int *x)
{
if(Empty_SeQue(s))
return 0;
else
{
s-front=(s-front+1)%MAX;
*x=s-data[s-front];
s-num--;
return 1;
}
}
void Print_SeQue(SeQue *s)
{
int i,n;
i=(s-front+1)%MAX;
n=s-num;
while(n0)
{ printf("%d ",s-data[i]);
i=(i+1)%MAX;
n--;
}
}
void main()
{
SeQue *s;
int k,flag,x;
s=Init_SeQue();
do{
printf("\\\");
printf("\\t\\t\\t循环顺序队列\");
printf("\\t\\t\\t***********************\");
printf("\\t\\t\\t**1-入队**\");
printf("\\t\\t\\t**2-出队**\");
printf("\\t\\t\\t**3-判 队 空**\");
printf("\\t\\t\\t**4-队列显示**\");
printf("\\t\\t\\t**0-返回**\");
printf("\\t\\t\\t***********************\");
printf("\\t\\t\\t 请输入菜单项(0-4):");
scanf("%d",k);
switch(k)
{
case 1:
printf("\请输入入队元素:");
scanf("%d",x);
flag=In_SeQue(s,x);
if(flag==0)
printf("\队满不能入队!按任意键返回..");
else
printf("\元素已入队!按任意键返回..");
getch();
system("cls");
break;
case 2:
flag=Out_SeQue(s,x);
if(flag==0)
printf("\队列空出队失败!按任意键返回..");
else
printf("\队列头元素已出队~!按任意键返回..");
getch();
system("cls");
break;
case 3:
flag=Empty_SeQue(s);
if(flag==1)
printf("\该队列为空!按任意键返回..");
else
printf("\该队列不为空!按任意键返回..");
getch();
system("cls");
break;
case 4:
printf("\该队列元素为:");
Print_SeQue(s);
printf("\按任意键返回..");
getch();
system("cls");
break;
}
}while(k!=0);
}
数据结构(c语言版)队列基本操作的实现
/***************/
/* 链式队列 */
/***************/
#include "stdlib.h"
#include "stdio.h"
/* 定义链式队列类型 */
typedef int ElemType;
typedef struct QNode
{ ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{ QueuePtr front;
QueuePtr rear;
} LinkQueue;
/* 1、初始化链式队列 */
void InitQueue(LinkQueue *Q)
{ Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode));
if (!(Q-front)) exit(0);
Q-front-next=NULL; }
/* 2、销毁链式队列 */
void DestroyQueue(LinkQueue *Q)
{ while (Q-front)
{ Q-rear=Q-front-next;
free(Q-front);
Q-front=Q-rear; }
}
/* 3、清空链式队列 */
void ClearQueue(LinkQueue *Q)
{ QueuePtr p;
p=Q-front-next;
while (p)
{ Q-front-next=p-next;
free(p); }
Q-rear=Q-front;
}
/* 4、判断空队列 */
int QueueEmpty(LinkQueue Q)
{ if (Q.front==Q.rear)
return 1;
else
return 0; }
/* 5、求链式队列长度 */
int QueueLength(LinkQueue Q)
{ QueuePtr p; int n=0;
p=Q.front;
while (p!=Q.rear)
{ n++; p=p-next; }
return n;
}
/* 6、取队头元素 */
ElemType GetHead(LinkQueue Q)
{ if (Q.front!=Q.rear)
return Q.front-next-data;
}
/* 7、入队列 */
void EnQueue(LinkQueue *Q, ElemType e)
{ QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if (!p) exit(0);
p-data=e; p-next=NULL;
Q-rear-next=p;
Q-rear=p; }
/* 8、出队列 */
void DeQueue(LinkQueue *Q, ElemType *e)
{ QueuePtr p;
if (Q-front!=Q-rear)
{ p=Q-front-next;
*e=p-data;
Q-front-next=p-next;
if (Q-rear==p) Q-rear=Q-front;
free(p); }
}
/* 9、遍历链式队列并输出元素 */
void QueueTraverse(LinkQueue Q)
{ QueuePtr p;
printf("\nQueue: ");
p=Q.front-next;
while (p)
{ printf("%d\t",p-data);
p=p-next;}
}
/* 约瑟夫问题 */
void Joseffer(int n)
{ LinkQueue Q; int i; ElemType x;
InitQueue(Q);
for(i=1; i=n; i++)
EnQueue(Q,i);
while (!QueueEmpty(Q))
{ for(i=1; i=3; i++)
{ DeQueue(Q,x);
if (i!=3)
EnQueue(Q,x);
else
printf("%5d",x);
}
}
}
/* 主函数 */
main()
{ LinkQueue Q; int i; ElemType x;
InitQueue(Q);
for(i=2; i=5; i++)
EnQueue(Q,i);
printf("len:%d\n",QueueLength(Q));
while (!QueueEmpty(Q))
{ DeQueue(Q,x);
printf("%d\t",x); }
//QueueTraverse(Q);
//Joseffer(6);
}
自己去调试吧,这个是C语言版的链式队列,如果看不懂或者调不出来就去看书吧。否则你这门是白学了。
注:这里是链式队列
/***************/
/* 循环队列 */
/***************/
#include "stdlib.h"
#include "stdio.h"
#define N 100
/* 定义循环队列类型 */
typedef int ElemType;
typedef struct
{ ElemType *base;
int front;
int rear;
} SqQueue;
/* 1、初始化循环队列 */
void InitQueue(SqQueue *Q)
{ Q-base=(ElemType*)malloc(N*sizeof(ElemType));
Q-front=Q-rear=0; }
/* 2、销毁循环队列 */
void DestroyQueue(SqQueue *Q)
{ free(Q-base); }
/* 3、清空循环队列 */
void ClearQueue(SqQueue *Q)
{ Q-front=Q-rear=0; }
/* 4、判断空队列 */
int QueueEmpty(SqQueue Q)
{ if (Q.front==Q.rear)
return 1;
else
return 0; }
/* 5、求循环队列长度 */
int QueueLength(SqQueue Q)
{ return (Q.rear+N-Q.front)%N; }
/* 6、取队头元素 */
void GetHead(SqQueue Q, ElemType *e)
{ if (Q.front!=Q.rear)
*e=Q.base[Q.front];
}
/* 7、入队列 */
int EnQueue(SqQueue *Q, ElemType e)
{ if ((Q-rear+1)%N==Q-front)
return 0;
Q-base[Q-rear]=e;
Q-rear=(Q-rear+1)%N;
return 1; }
/* 8、出队列 */
int DeQueue(SqQueue *Q, ElemType *e)
{ if (Q-front==Q-rear)
return 0;
*e=Q-base[Q-front];
Q-front=(Q-front+1)%N;
return 1; }
/* 9、遍历循环队列并输出元素 */
void QueueTraverse(SqQueue Q)
{ int i;
printf("\nQueue: ");
if (Q.rearQ.front) Q.rear=Q.rear+N;
for(i=Q.front; iQ.rear; i++)
printf("%d\t",Q.base[i%N]); }
/* 主函数 */
main()
{ SqQueue Q; int i; ElemType x;
InitQueue(Q);
for(i=2; i=5; i++)
EnQueue(Q,i);
printf("len:%d\n",QueueLength(Q));
while (!QueueEmpty(Q))
{ DeQueue(Q,x);
printf("%d\t",x); }
QueueTraverse(Q);
}
在给你个循环队列吧
C语言 关于数据结构队列的问题 高分悬赏 各位高手请慢慢看
就几个明显的错误提一下
1. 函数 enterqueue中
s-queue[s-tear];
这句没有实际操作,估计应该是 s-queue[s-tear] = x; 用于在队列最后添加一个新的元素
2. 主函数中,大约21行左右
for(j=0;jk;j++)
{
deletequeue(l,e);
if(gethead(l,f)==0) // 这里多了一个分号,导致判断后没有任何动作可之心,删之
*f=0;
*e=*e+*f;
enterqueue(l,*e);
}
3. 主函数大约30行左右,打印输出
for(j=0;jl-tear;j++,p++) // 这里不可用i作循环变量,否则干扰外循环i
printf("%d ",*p);
4. deletequeue(l,e);
if(gethead(l,f)==0) // 多了分号
*f=0;
*e=*e+*f;
从语句目的看,是希望从deletequeue和gethead函数中,得到e或者f的地址,但是 1)由于传递的是指针的值,所以即使函数中修改了,主函数中无法得到新的地址;2)这两个函数体中,并没有设置地址的代码,总之,e 和 f 是没有可操作地址的
5. 最重要一点,没有看懂解题思路是什么。
即使按照删一个节点,再添两个节点的想法,也应该从队列的后面开始,这样间隔相加,并放在后移一个位置上,不至于影响后续计算。而这段程序从前开始修改队列,那新的节点产生,不就干扰后面的计算了?
所以,建议先说明一下解题思路,这样便于解决程序中的各种问题。
C语言 数据结构 队列和栈问题
给你看下栈的头文件
你自己添加判断是否是回文的方法吧
#ifndef STACK_H
#define STACK_H
#include iostream
using std::ostream;
//template class Type
//class Stack;
//template class Type
//ostream operator (ostream , const StackType );
template class Type
class Stack {
friend ostream operator (ostream , const StackType );
public:
static const int DefaultSize;
Stack(int = DefaultSize); //创建一个最大容量为MaxStackSize的空栈
Stack(Type[], int, int = DefaultSize); //用数组初始化栈
~Stack(){ delete [] stack; }
bool IsFull(); //若元素个数等于栈的最大容量则返回TRUE,否则返回FALSE
void Add(const Type ); //若IsFull()为TRUE,则调用StackFull,否则将item插入栈顶
bool IsEmpty(); //若栈中元素个数等于0则返回TRUE,否则返回FALSE
Type * Delete(Type); //若IsEmpty()为TRUE,则调用StackEmpty并返回0,
//否则删除栈顶元素并返回其指针
void StackFull(); //将栈的最大容量扩大一倍
void StackEmpty(); //输出警告:栈已空, 不能弹出变量
void Empty(); //将栈清空
int GetSize(); //获得栈内元素数目
private:
Type * stack;
int MaxSize;
int top;
};
template class Type
const int StackType::DefaultSize = 10;
template class Type
StackType::Stack(int pMaxSize) {
MaxSize = pMaxSize;
stack = new Type[MaxSize];
top = -1;
}
template class Type
StackType::Stack(Type pArray[], int pLen, int pMaxSize) {
stack = new Type[pMaxSize];
for ( int i = 0; i pLen; i++ )
{
stack[i] = pArray[i];
}
top = pLen - 1;
MaxSize = pMaxSize;
}
template class Type
inline bool StackType::IsFull() {
if (top == MaxSize - 1) return true;
else return false;
}
template class Type
inline bool StackType::IsEmpty() {
if (top == -1) return true;
else return false;
}
template class Type
void StackType::Add(const Type pX) {
if (IsFull())
{
StackFull();
stack[++top] = pX;
}
else stack[++top] = pX;
}
template class Type
Type * StackType::Delete(Type pX) {
if (IsEmpty())
{
StackEmpty();
return 0;
}
pX = stack[top--];
return pX;
}
template class Type
void StackType::StackEmpty() {
cout "栈已空,不能进行弹出操作!" endl;
}
template class Type
void StackType::StackFull() {
Type * nStack = new Type[MaxSize * 2];
for ( int i = 0; i = top; i++ )
{
nStack[i] = stack[i];
}
MaxSize = MaxSize * 2;
delete [] stack;
stack = nStack;
cout "栈已满,栈的自动容量自动扩充为原来的两倍 (" MaxSize ")" endl;
}
template class Type
ostream operator (ostream pOutput, const StackType pS) {
if (pS.top == -1)
{
pOutput "空栈" endl;
return pOutput;
}
for ( int i = 0; i = pS.top; i++ )
{
pOutput pS.stack[i] " ";
}
return pOutput;
}
template class Type
void StackType::Empty() {
top = -1;
}
template class Type
int StackType::GetSize() {
return top + 1;
}
#endif
关于c语言数据结构队列主函数和数据结构队列代码c语言的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。