#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 5
int insert(int,int,int);
int del(int,int,int);
int display(int,int,int);
void main()
{
int queue[MAX], front , rear;
int n;
front= -1;
rear= -1;
clrscr();
while(1)
{
printf ("\n Operation on list ");
printf ("\n1: Insert\n 2: Delete\n 3: Display\n 4: Reset\n 5: Exit");
printf ("\nEnter your choise(1/2/3/4/5):");
scanf ("%d",&n);
switch (n)
{
case 1:{
insert(queue[MAX], front,rear);
break;
}
case 2:{
del(queue[MAX],front,rear);
break;
}
case 3:{
display(queue[MAX],front,rear);
break;
}
case 4:{
front=-1;
rear=-1;
break;
}
case 5:{
exit(1);
}
}
}
}
int insert(int queue[MAX],int front,int rear)
{
int i;
printf("\n Enter the data");
scanf("%d",&i);
if(rear==MAX-1)
{
printf("\nOVERFLOW");
return (0);
}
else if(front==-1)
{
(front)++;
(rear)++;
queue[rear]=i;
}
(rear)++;
queue[rear]=i;
}
int del(int queue[MAX],int front,int rear)
{
int i;
if(front==-1 && rear==-1)
{
printf("\nUNDERFLOW");
return (0);
}
else if(front==(rear+1))
{
printf("\nUNDERFLOW");
return (0);
}
else
{
i=queue[front];
(front)++;
printf("\nThe element deleted is %d ",i);
}
}
int display(int queue[MAX], int front, int rear)
{
int i;
if(front==-1 && rear==-1)
{
printf("\nEmptu queue");
return (0);
}
else if(front==(rear+1))
{
printf("\nNo elements in queue");
return (0);
}
else
{
printf("\n The elements in queue are :");
for(i=front;i<=rear;i++)
printf("%d\n",queue[i]);
}
}
没有编译错误。但我有3次运行时错误
1.未定义的符号insert (int,int,int)
2.未定义的符号display (int,int,int)
3.未定义的符号del (int,int,int)
我认为这是由于阵列的减速。如何在函数初始化中定义数组
答案 0 :(得分:1)
您需要使用与其定义相同的签名声明您的函数。例如:
int display(int,int,int);
应该是:
int display(int queue[MAX], int front, int rear);
答案 1 :(得分:0)
由于 insert,del,display 的声明和定义,您必须收到编译错误 冲突。
以这种方式修改代码
原型:
int insert(int *queue,int front,int rear);
int del(int *queue,int front,int rear);
int display(int *queue,int front,int rear);
宣言
int insert(int queue[],int front,int rear) {
****** insert Operation *******
}
与其他操作相同
删除和显示,当你从主调用这些函数时,就像这样调用它们
insert(queue,front,rear);
答案 2 :(得分:0)
2次更改
您应该从queue
而不是main()
queue[MAX]
insert(queue,front,rear);
del(queue,front,rear);
display(queue,front,rear);
在函数声明中执行此操作:
int insert(int[],int,int);
int del(int[],int,int);
int display(int[],int,int);
更大的问题
代码还有一个问题,变量front
和rear
在insert()
函数中按值传递。
现在这样做是为了纠正它。
声明:int insert(int[],int*,int*);
来自main()
:insert(queue,&front,&rear);
在定义中这样做:
int insert(int queue[MAX],int *front,int *rear)
{
int i;
printf("\n Enter the data");
scanf("%d",&i);
if(*rear==MAX-1)
{
printf("\nOVERFLOW");
return (0);
}
else if(*front==-1)
{
(*front)++;
(*rear)++;
queue[*rear]=i;
}
(*rear)++;
queue[*rear]=i;
}
为del()
做同样的事情。没有必要为display()
执行此操作。
你的程序现在应该可以正常工作。
答案 3 :(得分:0)
传递数组并不像你的方式。
所以函数调用应该是
insert(queue, front,rear); //same for others
代替
insert(queue[MAX], front,rear);.
同样声明应
int insert (int queue[],int,int ); //same for others
你必须知道如何pass array as function argument.
您正在传递front
和rear
个变量作为它的副本(通过值传递)。需要传递他们的地址。
像
insert(queue, &front,&rear); //same for others
在接收方,您的功能应该是
int insert (int queue[MAX],int *front,int *rear ) //same for others
{
.......
}
修改
您可以在此处查看已编辑的代码http://pastebin.com/pxX8ZqAj