(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; }