顺序栈和链栈结构及实现

    xiaoxiao2025-01-13  62

    一、目的

    领会顺序栈存储结构和掌握顺序栈中各种基本运算算法设计;领会链栈存储结构和掌握链栈中各种基本运算算法设计。

    二、内容

    编写一个程序sqstack.cpp,实现顺序栈(假设栈中元素类型ElemType为char)的各种基本运算,并在此基础上设计一个程序exp3-1.cpp,完成如下功能: (1) 初始化栈s (2) 判断栈s是否非空 (3) 依次进栈元素a、b、c、d、e (4) 判断栈s是否非空 (5) 输出出栈序列 (6) 判断栈s是否非空 (7) 释放栈编写一个程序listack.cpp,实现链栈(假设栈中元素类型ElemType为char)的各种基本运算,并在此基础上设计一个程序exp3-2.cpp,完成如下功能: (1)初始化栈s (2)判断栈s是否非空 (3)依次进栈元素a、b、c、d、e (4)判断栈s是否非空 (5)输出出栈序列 (6)判断栈s是否非空 (7)释放栈

    三、源代码

    顺序栈基本运算 #include<stdio.h> #include<malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; }SqStack; void InintStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } void DestroyStack(SqStack *&s) { free(s); } bool stackEmpty(SqStack *s) { return(s->top==-1); } bool Push(SqStack *&s,ElemType e) { if(s->top==MaxSize-1) return false; s->top++; s->data[s->top]=e; return true; } bool Pop(SqStack *&s,ElemType &e) { if(s->top==-1) return false; e=s->data[s->top]; s->top--; return true; } bool GetTop(SqStack *s,ElemType &e) { if(s->top==-1) return false; e=s->data[s->top]; return true; } int main() { ElemType e; SqStack *s; printf("顺序栈s的基本运算如下:\n"); printf("(1)初始化栈s\n"); InintStack(s); printf("(2)栈为%s\n",(stackEmpty(s)?"空":"非空")); printf("(3)依次进栈元素a,b,c,d,e\n"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); printf("(4)栈为%s\n",(stackEmpty(s)?"空":"非空")); printf("(5)出栈序列:"); while(!stackEmpty(s)) { Pop(s,e); printf("%c",e); } printf("\n"); printf("(6)栈为%s\n",(stackEmpty(s)?"空":"非空")); printf("(7)释放栈\n"); DestroyStack(s); return 0; } 链栈基本运算 #include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct linknode { ElemType data; struct linknode *next; }LinkStNode; void InitStack(LinkStNode *&s) { s=(LinkStNode *)malloc(sizeof(LinkStNode)); s->next=NULL; } void DestroyStack(LinkStNode *&s) { LinkStNode *p=s->next; while(p!=NULL) { free(s); s=p; p=p->next; } free(s); } bool StackEmpty(LinkStNode *s) { return(s->next==NULL); } void Push(LinkStNode *&s,ElemType e) { LinkStNode *p; p=(LinkStNode *)malloc(sizeof(LinkStNode)); p->data=e; p->next=s->next; s->next=p; } bool Pop(LinkStNode *&s,ElemType &e) { LinkStNode *p; if(s->next==NULL) return false; p=s->next; e=p->data; s->next=p->next; free(p); return true; } bool GetTop(LinkStNode *s,ElemType &e) { if(s->next==NULL) return false; e=s->next->data; return true; } int main() { ElemType e; LinkStNode *s; printf("链栈s的基本运算如下:\n"); printf("(1)初始化栈s\n"); InitStack(s); printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(3)依次进栈元素a,b,c,d,e\n"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(5)出栈序列:"); while(!StackEmpty(s)) { Pop(s,e); printf("%c",e); } printf("\n"); printf("(6)栈为%s\n",(StackEmpty(s)?"空":"非空")); printf("(7)释放栈\n"); DestroyStack(s); return 0; }

    备注: 有问题可以评论,看到后我会尽力及时回复的,谢谢!

    最新回复(0)