根据我所给的代码写出队的主函数 MaxSize=100 #全局变量,假设容量为100 class CSqQueue: #循环队列类 def __init__(self): #构造方法 self.data=[None]*MaxSize #存放队列中元素 self.front=0 #队头指针 self.rear=0 #队尾指针 def empty(self): #判断队列是否为空 return self.front==self.rear def push(self,e): #元素e进队 assert (self.rear+1)%MaxSize!=self.front #检测队满 self.rear=(self.rear+1)%MaxSize self.data[self.rear]=e def pop(self): #出队元素 assert not self.empty() #检测队空 self.front=(self.front+1)%MaxSize return self.data[self.front] def gethead(self): #取队头元素 assert not self.empty() #检测队空 head=(self.front+1)%MaxSize #求队头元素的位置 return self.data[head] def size(self): return ((self.rear-self.front+MaxSize)%MaxSize) def pushk(qu, k, e): # 进队第k个元素e n = qu.size() if k < 1 or k > n + 1: return False # 参数k错误返回False if k <= n: for i in range(1, n + 1): # 循环处理队中所有元素 if i == k: qu.push(e) # 将e元素进队到第k个位置 x = qu.pop() # 出队元素x qu.push(x) # 进队元素x else: qu.push(e) # k=n+1时直接进队e return True def popk(qu,k): #出队第k个元素 n=qu.size() assert k>=1 and k<=n #检测参数k错误 for i in range(1,n+1): #循环处理队中所有元素 x=qu.pop() #出队元素x if i!=k: qu.push(x) #将非第k个元素进队 else: m=x #取第k个出队的元素 return m if __name__ == '__main__': qu = CSqQueue() n=int(input("请输入元素个数:")) print("请依次输入每个元素:") for i in range(n): x = input() qu.push(x) # 将输入的元素依次入队 print("元素个数=%d" % (qu.size())) k=int(input("请输入进队元素的序号:")) x = int(input("请输入进队元素:")) pushk(qu,k,x) c=int(input("请输入取出元素的序号:")) popk(qu,c) while not qu.empty(): print(qu.pop(), end=' ') print() x = int(input("请输入入队元素:")) qu.push(x)
时间: 2023-06-02 22:06:54 浏览: 112
以下是队列的主函数,其最大长度为100:
```c++
#include<iostream>
using namespace std;
const int MaxSize = 100;
struct Queue
{
int data[MaxSize];
int front, rear;
};
void InitQueue(Queue& Q)
{//初始化队列
Q.front = Q.rear = 0;
}
bool IsEmpty(Queue Q)
{//判断队列是否为空
if (Q.front == Q.rear) //队列为空
return true;
else //队列不为空
return false;
}
bool EnQueue(Queue& Q, int x)
{//将元素x插入队列Q的队尾
if ((Q.rear + 1) % MaxSize == Q.front) //队列已满无法插入
return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
bool DeQueue(Queue& Q, int &x)
{//队头元素出队
if (Q.front == Q.rear) //队列为空无法删除
return false;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}
bool GetHead(Queue Q, int &x)
{//取队头元素
if (Q.front == Q.rear) //队列为空
return false;
x = Q.data[Q.front];
return true;
}
int QueueLength(Queue Q)
{//返回队列长度
return (Q.rear - Q.front + MaxSize) % MaxSize;
}
void PrintQueue(Queue Q)
{//打印队列元素
while (!IsEmpty(Q))
{
int x;
DeQueue(Q, x);
cout << x << " ";
}
}
int main()
{
Queue Q;
InitQueue(Q);
for (int i = 1; i <= 10; i++)
{
EnQueue(Q, i);
}
PrintQueue(Q);
int len = QueueLength(Q);
cout << endl << "队列长度为:" << len << endl;
int x;
if (GetHead(Q, x))
cout << "队头元素为:" << x << endl;
if (DeQueue(Q, x))
cout << "出队元素为:" << x << endl;
len = QueueLength(Q);
cout << "队列长度为:" << len << endl;
return 0;
}
```
阅读全文