ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:17.20KB ,
资源ID:9461006      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9461006.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(栈的操作算法实现.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

栈的操作算法实现.docx

1、栈的操作算法实现一 顺序栈的实现#define maxsize 6 /*顺序栈的容量*/ typedef struct ElementType datamaxsize;int top;SqStackTp;顺序栈被定义为一个结构类型,它有两个域data和top。data为一个一维数组,用于存储栈中元素,DataType为栈元素的数据类型(有待设定)。top为int型,它的取值范围为0.sqstack_maxsize-1。top=0表示栈空,top=sqstack_maxsize-1表示栈满。对于图3-2顺序栈sqstack_ maxsize应为6。下面讨论栈的基本运算在顺序栈上的实现。1.初始化

2、: 初始化运算是将栈顶初始化为0;int InitStack(SqStackTp *sq) sq-top=-1; return(1);2.进栈:进栈的主要操作是:栈顶下标加1;将入栈元素放入到新的栈顶下标所指的位置上。 算法如下:int Push(SqStackTp *sq, ElementType x) /*若栈未满,将元素x入栈sq中;否则提示出错信息*/ if(sq-top= maxsize-1) printf(栈满);return(0);else sq-top+; sq-datasq-top=x; return(1);3.退栈:退栈先要将栈顶元素取出,由参数返回,并将栈顶减。int P

3、op(SqStackTp *sq, ElementType *x); if (sq-top=-1) printf(下溢); return(0);else *x=sq-datasq-top; sq-top-; return(1); ;4.判栈空:int EmptyStack(SqStackTp *sq)/*若栈空返回1;否则返回0*/if (sq-top=-1) return(1) else return(0);5.读栈顶元素:int GetTop(SqStackTp *sq, ElementType *x)/*取栈顶元素,栈顶元素通过参数返回*/if (sq-top=-1) return(0)

4、;else *x=sq-datasq-top; return(1);6.顺序栈应用举例(进栈与出栈)#include stdio.h#define ElementType char#define maxsize 40typedef struct ElementType datamaxsize;int top; SqStackTp;int InitStack(SqStackTp *sq) sq-top=-1; return(1);int Push(SqStackTp *sq, ElementType x)if(sq-top= maxsize-1) printf(栈满); return(0);el

5、se sq-top+; sq-datasq-top=x; return(1);int Pop(SqStackTp *sq, ElementType *x) if (sq-top=-1) printf(下溢); return(0);else *x=sq-datasq-top; sq-top-; return(1);int EmptyStack(SqStackTp *sq)if (sq-top=-1)return(1);else return(0);/*主函数*/void main( ) SqStackTp sq;typedef ch ElementType;InitStack(&sq);for

6、(ch=A;chdata=(LStackTp)malloc(sizeof(node);x; /*元素的值填入新结点的data域*/p-next=*ls; /*原栈顶链入新结点的next域*/*ls=p; /*新结点成为新的栈顶*/3.退栈: 退栈算法的基本步骤包括: 栈顶结点的data域的值由参数返回,并取下栈顶结点,让它的下一个结点成为新的栈顶; 将取出的栈顶结点空间释放。int Pop(LStackTp *ls, ElementType *x)/*栈顶元素通过参数返回,它的直接后继成为新的栈顶*/ LStackTp p;if(*ls)!=NULL) p=*ls;*x=p-data; /*栈

7、顶元素通过参数返回 */ *ls=p-next;/*原栈顶的下一个结点成为新的栈顶*/ free(p); /*释放原栈顶结点空间*/ return 1; else return 0;4.判栈空:int EmptyStack(LStackTp *ls) /*若栈为空 则返回值1,否则返回值0 */if(*ls=NULL) return(1); else return(0);5.读栈顶元素:int GetTop(LStackTp *ls, ElementType *x) /*取栈顶元素*/ if(*ls)!=NULL) *x=(*ls)-data;return 1; else return 0;6

8、.链栈应用举例(进栈与出栈)1)#include stdio.h#define ElementType char#define size sizeof(node)typedef struct ElementType data;struct node *next; node ; node *LStackTp;void InitStack(LStackTp *ls)*ls=NULL;void Push(LStackTp *ls, ElementType x) LStackTp p;p=(LStackTp)malloc(size);p-data=x;p-next=*ls;*ls=p;int Pop(

9、LStackTp *ls, ElementType *x) LStackTp p;if(*ls)!=NULL) p=*ls;*x=p-data;*ls=(*ls)-next;free(p);return(1); else return(0);int EmptyStack(LStackTp ls)if(ls=NULL) return(1);else return(0);void main() LStackTp ls;ElementType ch;InitStack(ls);for (ch=A;chdata);printf(n);while(!EmptyStack(ls) Pop(&ls,&ch)

10、;printf(%c,ch); printf(n);运行结果:ABCDEFGHIJKLMMLKJIHGFEDCBA2)写一个算法,借助栈将一个带头结点的单链表倒置。head头a1a2 .anNULL分析:这里可利用栈的特征,先沿着链表从头至尾扫描一遍,将链表的每个结点的data域的值依次进栈,然后再沿着链表从头至尾扫描一遍,同时栈中元素依次出栈,并填入到链表的每个结点的data域中。算法如下:void reverse_list(LkListTp *head) LStackTp ls,p; ElementType x; InitStack(&ls); /*初始化链栈 */p=(*head)-ne

11、xt; while(p!=NULL) Push(&ls,p-data); p=p-next; p=(*head)-next; while (!EmptyStack(ls) Pop(&ls,&x); p-data=x; p=p-next;实现程序如下:(用链栈实现单链表倒置)#include stdio.h#define ElementType char#define size sizeof(node)typedef struct ElementType data;struct node *next; node;node *LkListTp;void InitStack(LStackTp *ls

12、) *ls=NULL; void Push(LStackTp *ls, ElementType x) LStackTp q;q=(LStackTp)malloc(size); /*申请一个新结点*/q-data=x; /*元素的值填入新结点的data域*/q-next=*ls; /*原栈顶链入新结点的next域*/*ls=q; /*新结点成为新的栈顶*/int Pop(LStackTp *ls, ElementType *x)/*栈顶元素通过参数返回,它的直接后继成为新的栈顶*/ LStackTp p;if(*ls)!=NULL) p=*ls;*x=p-data;*ls=(*ls)-next;

13、 /*原栈顶的下一个结点成为新的栈顶*/free(p); /*释放原栈顶结点空间*/return(1); else return(0);int EmptyStack(LStackTp ls) /*若栈为空则返回值1,否则返回值0*/if(ls=NULL) return(1);else return(0);void reverse_list(LkListTp *head) LStackTp ls,p;ElementType x;InitStack(&ls); /*初始化链栈 */p=(*head)-next;while(p!=NULL) Push(&ls,p-data); p=p-next; p

14、=(*head)-next;while (!EmptyStack(ls) Pop(&ls,&x); p-data=x; p=p-next;LkListTp create_lklist2()/*直接建表算法。p是一个pointer类型的变量,用来指示链入位置*/LkListTp p,q,s,head;ElementType x;head=(LkListTp)malloc(size); /*生成头结点*/p=head; /*尾指针置初值*/scanf(%c,&x); /*读入第一个元素*/while(x!=?) /*输入的不是结束标志时继续链入*/q=(LkListTp)malloc(size);

15、q-data=x; /*生成一个新结点*/p-next=q; /*新结点链入*/p=q; /*修改尾指针指向新的表尾*/scanf(%c,&x); /*读入下一个元素*/p-next=NULL;return(head); /*置尾结点标志*/void main()LkListTp p,q,head;ElementType x;printf(n input LkList:);head=create_lklist2();reverse_list(&head);printf(n output LkList:);p=head-next;while (p!=NULL) printf(%c,p-data);p=p-next; printf(n);运行结果: input LkList:ABCDEFG? output LkList:GFEDCBA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1