求C++语言下栈的基本操作和队列的基本操作,要可操作,带main 函数。

栈的基本操作为初始化栈、判栈为空、出栈、入栈等运算。队列的基本操作为初始化队列、判队列为空、出队列、入队列等运算。两个分开写。我怕弄混。要可以直接执行的,带main函数!... 栈的基本操作为初始化栈、判栈为空、出栈、入栈等运算。
队列的基本操作为初始化队列、判队列为空、出队列、入队列等运算。
两个分开写。我怕弄混。
要可以直接执行的,带main函数!
小弟这里拜谢了!
跪求!
展开
 我来答
SNSD_TR
2013-11-21 · 超过20用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:48.2万
展开全部
这个是栈的操作
#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; 
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式