栈的基本操作
题目:栈的基本操作(顺序存储和链式存储任选一种)
一需求分析
了解顺序栈,链式栈的定义;程序构建了进栈,出栈,空栈,和满栈等操作。
二、概要设计
1;/* 顺序栈的定义*/ #define MAXSIZE 100 typedef int ElemType; typedef struct{
ElemType data[MAXSIZE]; int top; }sqStack;
/* 链式栈的定义*/ typedef struct Lstack{ ElemType data; struct Lstack *next; }Lstack
2;/*创建一个顺序栈*/ void Create_Sqs(sqStack *s) {
int i, n;
printf(\ scanf(\ for (i = 1; i <= n; i++) scanf(\ s->top = n; }
2、本程序包含五个模块:
(1)主程序模块: void main(){
定义头文件;
定义类型; 接受命令; 处理命令; 输出; }
第 1 页 共 7 页
(2)顺序栈,链式栈的定义; (3)输入输出栈元素; (4)创建循环队列;
(5)入队,出队,输出值; 三、详细设计
1、定义头文件
#include
ElemType data[MAXSIZE]; int top; }sqStack;
/* 链式栈的定义*/ typedef struct Lstack{ ElemType data; struct Lstack *next; }Lstack;
/*练习的主要内容,是栈和队列的基本操作*/ /*创建一个顺序栈*/
void Create_Sqs(sqStack *s) {
int i, n;
printf(\ scanf(\ for (i = 1; i <= n; i++) scanf(\ s->top = n; }
/*输出栈元素*/
void out_Sqs(sqStack *s) {
int i;
if (s->top == 0) { return; }
for (i = s->top; i > 0; i--) {
第 2 页 共 7 页
printf(\ }
printf(\}
/*进栈一个元素*/
void push(sqStack *s, ElemType e) {
if (s->top == MAXSIZE - 1) { printf(\ } else { s->top = s->top + 1; s->data[s->top] = e; } }
/*出栈一个元素*/
ElemType pop(sqStack *s) {
int x;
if (s->top == 0) { printf(\ return(-1); } else { x = s->data[s->top]; s->top = s->top - 1; return(x); } }
/* 循环队列的定义*/ typedef struct{
ElemType elem[MAXSIZE];
int front; //头指针,若队列不空,指向队头元素;
int rear; //尾指针,若队列不空,指向队尾元素的下一个位置 int full; }SqQueue;
/*创建一个循环队列*/
第 3 页 共 7 页
void create_sqQ(SqQueue * S) {
int n = 0; int i = 0;
ElemType data;
/*首先构造一个空队列*/ S->front = S->rear = 0; S->full=0;
/* 输入元素个数*/ printf(\ scanf(\ if (n > MAXSIZE) { printf(\ return; }
/*逐步输入元素的值*/ for (i = 0; i < n; i++) { scanf(\ S->elem[S->rear] = data; S->rear = (S->rear + 1) % MAXSIZE; if (S->rear == S->front) { printf(\ return; } }
return; }
/* 入队*/
ElemType EnQueue(SqQueue *S, ElemType e) {
if (S->rear == S->front) { printf(\ return (-1); }
S->elem[S->rear] = e;
S->rear = (S->rear + 1)% MAXSIZE; return e; }
/* 出队 */
第 4 页 共 7 页
ElemType delQueue(SqQueue * S) {
ElemType e;
if (S->front == S->rear && S->full==0) { printf(\ return(-1); }
e = S->elem[S->front];
S->front = (S->front + 1) % MAXSIZE; S->full=0; return e; }
/* 输出队列*/
void output_Queue(SqQueue *S) {
int i = 0;
if (S->front == S->rear && S->full==0) { printf(\ return; }
i = S->front;
while (i != S->rear) { printf(\ i = (i + 1) % MAXSIZE; }
printf(\ }
主函数: void main() {
sqStack s; SqQueue S; ElemType e; Create_Sqs(&s); out_Sqs(&s); push(&s, 10); out_Sqs(&s);
printf(\ out_Sqs(&s); system(\
第 5 页 共 7 页