(1)采用链式存储实现栈的初始化、入栈、出栈操作。
(2)采用顺序存储实现栈的初始化、入栈、出栈操作。
(3)采用链式存储实现队列的初始化、入队、出队操作。
(4)采用顺序存储实现循环队列的初始化、入队、出队操作。
(5)在主函数中设计一个简单的菜单,分别测试上述算法。
- //用链表实现栈用的是头插法,用链表实现队列用的是尾插法。
- #include<stdio.h>
- #include<stdlib.h>
- #define N 105
- int a[N];
- struct node
- {
- int data;
- node *next;
- }*h;
- void LinkStack()//用链表实现栈
- {
- node *s;
- int n;
- printf("请输入需要入栈元素的数量: ");
- scanf("%d",&n);
- printf("请输入需要入栈的元素: ");
- h=NULL;
- s=h;
- while(n--)
- {
- s=(node *)malloc(sizeof(node));
- scanf("%d",&s->data);
- s->next=h;
- h=s;
- }
- printf("输出栈中的元素: ");
- while(h!=NULL)
- {
- printf("%d ",h->data);
- h=h->next;
- }
- printf("\n");
- return ;
- }
- void QueStack()//用顺序表实现栈
- {
- int n;
- int top;
- printf("请输入需要入栈的元素的数量: ");
- scanf("%d",&n);
- printf("请输入需要入栈的元素: ");
- top=0;
- a[top++]=-1;
- while(n--)
- {
- scanf("%d",&a[top++]);
- top%=(N-1);
- }
- printf("输出栈中的元素: ");
- top--;
- if(top<0)
- top=N-1;
- while(a[top]!=-1)
- {
- printf("%d ",a[top--]);
- if(top<0)
- top=N-1;
- }
- printf("\n");
- return ;
- }
- void LinkQueue()//用链表实现队列
- {
- node *s,*e;
- int n;
- h=(node *)malloc(sizeof(node));
- s=h;
- printf("请输入需要入队的元素的数量: ");
- scanf("%d",&n);
- printf("请输入需要入队的元素: ");
- while(n--)
- {
- e=s;
- s=(node *)malloc(sizeof(node));
- scanf("%d",&s->data);
- e->next=s;
- s->next=NULL;
- }
- printf("输出队列中的元素: ");
- h=h->next;
- while(h!=NULL)
- {
- printf("%d ",h->data);
- h=h->next;
- }
- printf("\n");
- return ;
- }
- void QueQueue()//用顺序表实现队列
- {
- int n,i;
- printf("请输入需要入队元素的数量: ");
- scanf("%d",&n);
- printf("请输入需要入队的元素: ");
- for(i=0;i<n;i++)
- scanf("%d",&a[i]);
- printf("输出队列中的元素: ");
- for(i=0;i<n;i++)
- printf("%d ",a[i]);
- printf("\n");
- return ;
- }
- int PrintMenu()
- {
- printf("******************目录*******************\n");
- printf("用链式存储实现栈的操作: 1\n");
- printf("用顺序存储实现栈的操作: 2\n");
- printf("用链式存储实现队列的操作: 3\n");
- printf("用顺序存储实现队列的操作: 4\n");
- printf("结束操作。 0\n");
- printf("请输入操作指令: ");
- int T;
- scanf("%d",&T);
- switch(T)
- {
- case 1:LinkStack();break;
- case 2:QueStack();break;
- case 3:LinkQueue();break;
- case 4:QueQueue();break;
- case 0: return 1;
- default:printf("输入错误,请重新输入。\n");break;
- }
- return 0;
- }
- int main()
- {
- int flag;
- flag=0;
- while(1)
- {
- flag=PrintMenu();
- printf("\n");
- if(flag)
- break;
- }
- printf("谢谢使用!\n");
- return 0;
- }