求C++语言下栈的基本操作和队列的基本操作,要可操作,带main 函数。
栈的基本操作为初始化栈、判栈为空、出栈、入栈等运算。队列的基本操作为初始化队列、判队列为空、出队列、入队列等运算。两个分开写。我怕弄混。要可以直接执行的,带main函数!...
栈的基本操作为初始化栈、判栈为空、出栈、入栈等运算。
队列的基本操作为初始化队列、判队列为空、出队列、入队列等运算。
两个分开写。我怕弄混。
要可以直接执行的,带main函数!
小弟这里拜谢了!
跪求! 展开
队列的基本操作为初始化队列、判队列为空、出队列、入队列等运算。
两个分开写。我怕弄混。
要可以直接执行的,带main函数!
小弟这里拜谢了!
跪求! 展开
1个回答
展开全部
这个是栈的操作
#include <iostream>
using namespace std;
#define MAXSIZE 100
class Stack{
public:
Stack() { top = 0; };
void CreateStack();
void OutputStack();
void ClearStack();
int StackLength();
char OutTop();
void Push(char );
char Pop();
private:
char a[MAXSIZE];
int top;
};
void Stack::CreateStack()
{
cout << "请输入栈的元素个数:";
cin >> top;
cout << "请依次输入栈的元素" << endl;
for (int i=1; i<=top; i++)
{
cin >> a[i];
}
}
void Stack::OutputStack()
{
int w;
w = top;
if(top == 0)
cout << "栈是空的!" << endl;
else
{
cout << "输出栈中元素:" << endl;
while(w >= 1)
{
cout << a[w] << " ";
/*cout << a[w] << " ";*/
w--;
}
cout << endl;
}
}
char Stack::OutTop()
{
return a[top];
}
int Stack::StackLength()
{
return top;
}
void Stack::ClearStack()
{
top=0;
}
void Stack::Push(char e)
{
if (top == MAXSIZE - 1)
cout << "栈是满的!" << endl;
else
{
top = top + 1;
a[top] = e;
}
}
char Stack::Pop()
{
char x;
if (top == 0)
{
cout << "栈是空的!" << endl;
return(-1);
}
else
{
x = a[top];
top = top - 1;
return(x);
}
}
void display()
{
cout << "请选择操作:" << endl;
cout << "1、创建栈\n2、输出栈\n3、清空栈\n4、输出栈的元素个数\n5、输出栈顶元素\n6、插入新的栈顶元素\n7、删除栈顶元素\n0、退出" << endl;
}
int main()
{
Stack s;
int choice;
char e,r;
display();
do
{
cin >> choice;
switch(choice)
{
case 1:
s.CreateStack();
display();
break;
case 2:
s.OutputStack();
display();
break;
case 3:
s.ClearStack();
cout << "栈已清空" << endl;
display();
break;
case 4:
cout << "栈的元素个数为:" << s.StackLength() << endl;
display();
break;
case 5:
cout << "栈顶元素为:" << s.OutTop() << endl;
display();
break;
case 6:
cout << "输入新的栈顶的元素:";
cin >> e;
s.Push(e);
display();
break;
case 7:
r = s.Pop();
if(r != -1)
cout << "出栈元素为:" << r << endl;
display();
break;
case 0:
break;
default:
cout << "你敲错键了!" << endl;
}
}
while(choice != 0);
return 0;
}
这个是队列的操作
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW 0
typedef int elemtype;
typedef int status;
typedef struct QNode
{
elemtype data;
struct QNode *next;
}QNode,*queuePtr; //定义链表节点中数据
typedef struct
{
queuePtr front; //指向链表的头
queuePtr rear; //指向链表的尾 指向不是没有分配单元的节点
}LinkQueue;
//对队列进行初始化
status initQueue(LinkQueue &q)
{
q.front=q.rear=(queuePtr)malloc(sizeof(QNode)); //创建头节点 头指针指向头节点
if(!q.front) //创建失败
{
exit(OVERFLOW);
}
q.front->next=NULL;
return OK;
}
//销毁队列
status destoryQueue(LinkQueue &q)
{
while(q.front)
{
q.rear=q.front->next; //将头节点的next赋给尾指针
free(q.front); //删除头节点
q.front=q.rear; //重新生成为节点
}
printf("队列销毁成功!\n");
q.front=NULL;
return OK; //删除完成返回OK
}
//进行元素插入
status enQueue(LinkQueue &q,elemtype e)
{
queuePtr p=(queuePtr)malloc(sizeof(QNode)); //为新元素分配空间
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
q.rear->next=p; //为尾指针的next重新赋值 将元素插入表尾
q.rear=p; //重新定位尾指针
return OK;
}
//删除元素
status deQueue(LinkQueue &q)
{
if(q.front==q.rear) return ERROR; //此时队列为空
queuePtr p=q.front->next;
// e=p->data; //删除是dui首
q.front->next=p->next;
if(q.rear==p)
q.rear=q.front;
free(p);
printf("元素删除成功!\n");
return OK;
}
//获得队首元素
status getHead(LinkQueue &q)
{
queuePtr p=q.front->next;
printf("%d\n",p->data);
return OK;
}
//输出队列
status printQueue(LinkQueue q)
{
queuePtr p;
p=q.front->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
return OK;
}
int main()
{
LinkQueue q;
int i,j,k,m;
initQueue(q);//进行队列的初始化:
printf("插入几个数据:\n");
scanf("%d",&i);
for(j=0;j<i;j++)
{ printf("请输入第%d个整数",j+1);
scanf("%d",&k);
enQueue(q,k);
}
do
{
printf("请根据提示进行相应操作:\n");
printf("插入元素选择输入1:\n");
printf("删除元素选择输入2:\n");
printf("清空队列选择输入3:\n");
printf("输出队列选择输入4:\n");
printf("退出输入5:\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf("插入几个数据:\n");
scanf("%d",&i);
for(j=0;j<i;j++)
{
printf("请输入第%d个整数",j+1);
scanf("%d",&k);
enQueue(q,k);
}
break;
case 2: deQueue(q); break;
case 3: destoryQueue(q); break;
case 4: printQueue(q);break;
default: printf("请重新输入:\n");break;
}
}while(m!=5);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询