当前位置:首页 > 大全 >

c语言顺序栈的销毁(c语言栈的操作)

来源:原点资讯(www.yd166.com)时间:2022-12-15 17:00:31作者:YD166手机阅读>>

顺序栈(Sequence Stack)

SqStack.cpp:

/** * @author huihut * @E-mail:huihut@outlook.com * @version 创建时间:2016年9月9日 * 说明:本程序实现了一个顺序栈。 * 功能:有初始化、销毁、判断空、清空、入栈、出栈、取元素的操作。 */ #include "stdio.h" #include "stdlib.h" #include "malloc.h" //5个常量定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 //测试程序长度定义 #define LONGTH 5 //类型定义 typedef int Status; typedef int ElemType; //顺序栈的类型 typedef struct { ElemType *elem; int top; int size; int increment; } SqSrack; //初始化顺序栈 Status InitStack_Sq(SqSrack &S, int size, int inc) { S.elem = (ElemType *)malloc(size * sizeof(ElemType)); if (NULL == S.elem) return OVERFLOW; S.top = 0; S.size = size; S.increment = inc; return OK; } //销毁顺序栈 Status DestroyStack_Sq(SqSrack &S) { free(S.elem); S.elem = NULL; return OK; } //判断S是否空,若空则返回TRUE,否则返回FALSE Status StackEmpty_Sq(SqSrack S) { if (0 == S.top) return TRUE; return FALSE; } //清空栈S void ClearStack_Sq(SqSrack &S) { if (0 == S.top) return; S.size = 0; S.top = 0; } //元素e压入栈S Status Push_Sq(SqSrack &S, ElemType e) { ElemType *newbase; if (S.top >= S.size) { newbase = (ElemType *)realloc(S.elem, (S.size S.increment) * sizeof(ElemType)); if (NULL == newbase) return OVERFLOW; S.elem = newbase; S.size = S.increment; } S.elem[S.top ] = e; return OK; } //取栈S的栈顶元素,并用e返回 Status GetTop_Sq(SqSrack S, ElemType &e) { if (0 == S.top) return ERROR; e = S.elem[S.top - 1]; return e; } //栈S的栈顶元素出栈,并用e返回 Status Pop_Sq(SqSrack &S, ElemType &e) { if (0 == S.top) return ERROR; e = S.elem[S.top - 1]; S.top--; return e; } int main() { //定义栈S SqSrack S; //定义测量值 int size, increment, i; //初始化测试值 size = LONGTH; increment = LONGTH; ElemType e, eArray[LONGTH] = { 1, 2, 3, 4, 5 }; //显示测试值 printf("---【顺序栈】---\n"); printf("栈S的size为:%d\n栈S的increment为:%d\n", size, increment); printf("待测试元素为:\n"); for (i = 0; i < LONGTH; i ) { printf("%d\t", eArray[i]); } printf("\n"); //初始化顺序栈 if (!InitStack_Sq(S, size, increment)) { printf("初始化顺序栈失败\n"); exit(0); } printf("已初始化顺序栈\n"); //入栈 for (i = 0; i < S.size; i ) { if (!Push_Sq(S, eArray[i])) { printf("%d入栈失败\n", eArray[i]); exit(0); } } printf("已入栈\n"); //判断非空 if (StackEmpty_Sq(S)) printf("S栈为空\n"); else printf("S栈非空\n"); //取栈S的栈顶元素 printf("栈S的栈顶元素为:\n"); printf("%d\n", GetTop_Sq(S, e)); //栈S元素出栈 printf("栈S元素出栈为:\n"); for (i = 0, e = 0; i < S.size; i ) { printf("%d\t", Pop_Sq(S, e)); } printf("\n"); //清空栈S ClearStack_Sq(S); printf("已清空栈S\n"); getchar(); return 0; }

顺序栈数据结构和图片

typedef struct { ElemType *elem; int top; int size; int increment; } SqStack;

c语言顺序栈的销毁,c语言栈的操作(1)

队列(Sequence Queue)

队列数据结构

typedef struct { ElemType * elem; int front; int rear; int maxSize; }SqQueue;

非循环队列

非循环队列图片

c语言顺序栈的销毁,c语言栈的操作(2)

SqQueue.rear

循环队列

循环队列图片

c语言顺序栈的销毁,c语言栈的操作(3)

SqQueue.rear = (SqQueue.rear 1) % SqQueue.maxSize顺序表(Sequence List)

SqList.cpp:

/** * @author huihut * @E-mail:huihut@outlook.com * @version 创建时间:2016年9月9日 * 说明:本程序实现了一个顺序表。 */ #include "stdio.h" #include "stdlib.h" #include "malloc.h" //5个常量定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 //测试程序长度定义 #define LONGTH 5 //类型定义 typedef int Status; typedef int ElemType; //顺序栈的类型 typedef struct { ElemType *elem; int length; int size; int increment; } SqList; //初始化顺序表L Status InitList_Sq(SqList &L, int size, int inc) { L.elem = (ElemType *)malloc(size * sizeof(ElemType)); if (NULL == L.elem) return OVERFLOW; L.length = 0; L.size = size; L.increment = inc; return OK; } //销毁顺序表L Status DestroyList_Sq(SqList &L) { free(L.elem); L.elem = NULL; return OK; } //将顺序表L清空 Status ClearList_Sq(SqList &L) { if (0 != L.length) L.length = 0; return OK; } //若顺序表L为空表,则返回TRUE,否则FALSE Status ListEmpty_Sq(SqList L) { if (0 == L.length) return TRUE; return FALSE; } //返回顺序表L中元素个数 int ListLength_Sq(SqList L) { return L.length; } // 用e返回顺序表L中第i个元素的值 Status GetElem_Sq(SqList L, int i, ElemType &e) { e = L.elem[--i]; return OK; } // 在顺序表L顺序查找元素e,成功时返回该元素在表中第一次出现的位置,否则返回 - 1 int Search_Sq(SqList L, ElemType e) { int i = 0; while (i < L.length && L.elem[i] != e) i ; if (i < L.length) return i; else return -1; } //遍历调用 Status visit(ElemType e) { printf("%d\t", e); return OK; } //遍历顺序表L,依次对每个元素调用函数visit() Status ListTraverse_Sq(SqList L, Status(*visit)(ElemType e)) { if (0 == L.length) return ERROR; for (int i = 0; i < L.length; i ) { visit(L.elem[i]); } return OK; } //将顺序表L中第i个元素赋值为e Status PutElem_Sq(SqList &L, int i, ElemType e) { if (i > L.length) return ERROR; e = L.elem[--i]; return OK; } //在顺序表L表尾添加元素e Status Append_Sq(SqList &L, ElemType e) { if (L.length >= L.size) return ERROR; L.elem[L.length] = e; L.length ; return OK; } //删除顺序表L的表尾元素,并用参数e返回其值 Status DeleteLast_Sq(SqList &L, ElemType &e) { if (0 == L.length) return ERROR; e = L.elem[L.length - 1]; L.length--; return OK; } int main() { //定义表L SqList L; //定义测量值 int size, increment, i; //初始化测试值 size = LONGTH; increment = LONGTH; ElemType e, eArray[LONGTH] = { 1, 2, 3, 4, 5 }; //显示测试值 printf("---【顺序栈】---\n"); printf("表L的size为:%d\n表L的increment为:%d\n", size, increment); printf("待测试元素为:\n"); for (i = 0; i < LONGTH; i ) { printf("%d\t", eArray[i]); } printf("\n"); //初始化顺序表 if (!InitList_Sq(L, size, increment)) { printf("初始化顺序表失败\n"); exit(0); } printf("已初始化顺序表\n"); //判空 if (TRUE == ListEmpty_Sq(L)) printf("此表为空表\n"); else printf("此表不是空表\n"); //入表 printf("将待测元素入表:\n"); for (i = 0; i < LONGTH; i ) { if (ERROR == Append_Sq(L, eArray[i])) printf("入表失败\n");; } printf("入表成功\n"); //遍历顺序表L printf("此时表内元素为:\n"); ListTraverse_Sq(L, visit); //出表 printf("\n将表尾元素入表到e:\n"); if (ERROR == DeleteLast_Sq(L, e)) printf("出表失败\n"); printf("出表成功\n出表元素为%d\n", e); //遍历顺序表L printf("此时表内元素为:\n"); ListTraverse_Sq(L, visit); //销毁顺序表 printf("\n销毁顺序表\n"); if (OK == DestroyList_Sq(L)) printf("销毁成功\n"); else printf("销毁失败\n"); getchar(); return 0; }

顺序表数据结构和图片

typedef struct { ElemType *elem; int length; int size; int increment; } SqList;

c语言顺序栈的销毁,c语言栈的操作(4)

今天的分享就到这里了,大家要好好学C 哟~

写在最后:对于准备学习C/C 编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习视频分享:

c语言顺序栈的销毁,c语言栈的操作(5)

c语言顺序栈的销毁,c语言栈的操作(6)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

栏目热文

蓝牙耳机怎么老是连别人手机(蓝牙耳机怎么连不上手机)

蓝牙耳机怎么老是连别人手机(蓝牙耳机怎么连不上手机)

简介:近来,越来越多的人开始使用华为耳机,他们想知道华为耳机是否可以连接到其他手机?这篇文章将为您详细介绍华为耳机是否可...

2023-10-23 05:27:03查看全文 >>

内科护理学支气管哮喘思维导图(内科支气管哮喘病人的护理ppt)

内科护理学支气管哮喘思维导图(内科支气管哮喘病人的护理ppt)

众所周知,雾化吸入是一种以呼吸道和肺为靶器官的直接给药方法,具有起效快、局部药物浓度高、用药量少、应用方便及全身不良反应...

2022-12-08 21:11:20查看全文 >>

摩托古兹v85tt(摩托古兹v85tt缺点)

摩托古兹v85tt(摩托古兹v85tt缺点)

[爱卡摩托资讯选车图库]摩托古兹(MOTO GUZZI)自2014年进入中国后,其表现可以用不温不火来形容,除了横置V型...

2023-04-24 04:06:35查看全文 >>

河北农业大学贴吧(河北农业大学官网主页)

河北农业大学贴吧(河北农业大学官网主页)

河北省作为高考大省,每年高考竞争都相当激烈,而且河北省的高考难度也是很大的,一方面是因为河北省内只有一所211大学,那就...

2022-12-10 15:01:01查看全文 >>

立体构成面的构成设计作业图片(立体构成作业步骤图教程)

立体构成面的构成设计作业图片(立体构成作业步骤图教程)

在描述空间立体结构的形成原理时,我们首先需要了解不同材料面临的受力状况。材料在结构中的主要受力类型包括拉伸、压缩、弯曲和...

2023-10-21 17:36:16查看全文 >>

广州链家租房中介费收取标准(链家租房中介费多少钱)

广州链家租房中介费收取标准(链家租房中介费多少钱)

链家为用户打造精品服务。专题“金九银十”,是楼市传统的热销季,也是不少房产中介公司开启“大促销”的时节,诸如佣金打折、购...

2022-12-18 00:39:45查看全文 >>

初中手抄报图片大全(初中生关于学习手抄报图片大全)

初中手抄报图片大全(初中生关于学习手抄报图片大全)

课程题目:万能手抄报模板设计绘画工具:勾线笔(基础不好的同学可以先用铅笔起稿) 马克笔 白纸 尺子课程模式:图文讲解(账...

2022-12-17 06:14:35查看全文 >>

老婆送给我的生日礼物说说(老婆送我的生日礼物感动的话)

老婆送给我的生日礼物说说(老婆送我的生日礼物感动的话)

媳妇啊你嫁过来十七个年头了每年都不忘給我送生日礼物我穿过你送的凉鞋、皮鞋、棉皮鞋我穿过你送的毛衣、单衣、羽绒服我背过你送...

2023-02-02 08:48:27查看全文 >>

剪映怎么把2张照片合成(剪映如何把很多照片合成一张)

剪映怎么把2张照片合成(剪映如何把很多照片合成一张)

这次主要讲解一下对于不会使用电脑软件的朋友们出了一期详细教程。如果你身边没有电脑或者不会使用photoshop的小伙伴们...

2023-01-22 22:04:27查看全文 >>

文档排行