首页 栈,队列,串的基本操作

栈,队列,串的基本操作

举报
开通vip

栈,队列,串的基本操作顺序栈 #include #include #include # define m 10 typedef struct { int a[m]; int top; }stack; void main() {int isempty(stack *s); int isfull(stack *s); int gettop(stack *s,int x); int get(stack *s,int b); void push(stack *s,int x); void pop(stack*...

栈,队列,串的基本操作
顺序栈 #include #include #include # define m 10 typedef struct { int a[m]; int top; }stack; void main() {int isempty(stack *s); int isfull(stack *s); int gettop(stack *s,int x); int get(stack *s,int b); void push(stack *s,int x); void pop(stack*s); int i,x,b,c,j=0; stack *s; s=(stack *)malloc(sizeof(stack)); s->top=0; printf("please enter 10 numbers\n"); for(i=0;i<=m-1;i++) { scanf("%d",&x); push(s,x); } if(isempty(s))printf("空栈\n"); else printf("非空\n"); if(isfull(s))printf("满栈\n"); else printf("非满\n"); gettop(s,x); printf("最后一个进栈元素为%d\n",x); printf("请输入要找第几号元素?\n"); scanf("%d",&b); c=get(s,b); printf("第%d元素为%d\n",b,c); printf("是否出栈?出栈请输入1\n"); scanf("%d",&j); printf("原栈中元素为:\n"); if(j)pop(s); else printf("出栈失败!\n"); } int isempty(stack *s) { if(s->top==0) return 1; else return 0; } int isfull(stack *s) { if(s->top==m) return 1; else return 0; } int gettop(stack *s,int x) {int i; i=isempty(s); if(i)printf("empty"); else x=s->a[s->top-1]; return x; } void push(stack *s,int x) {int i; i=isfull(s); if(i)printf("overflow"); else { s->a[s->top]=x; s->top++; } } int get(stack *s,int b) { int c; c=s->a[b-1]; return c; } void pop(stack*s) {int i,j,t; t=s->top; for(i=0;ia[s->top-1]); s->top--;} printf("%d\n",s->a[s->top-1]); s->top--; j=isempty(s); if(j)printf("出栈成功!\n"); } 链栈 约瑟夫环(循环队列,链队) #include #include #include typedef struct { int data; int a; struct Lnode *next; }Lnode; void main() { int m,n,i;Lnode *p,*q,*r; Lnode *establish_h(Lnode*p,int n); Lnode *nizhi(Lnode *p); printf("请输入人数\n"); scanf("%d",&n); p=establish_h(p,n); p=nizhi(p); printf("请输入m初值\n"); scanf("%d",&m); printf("出列序列为\n"); while(p->a<=n&&p->a>0) { for(i=1;inext; } m=p->data; printf("%d\n",p->a); q=p->next; r->next=q; free(p); p=q; } } Lnode *establish_h(Lnode*p,int n) {Lnode *q;int i;int t; p=(Lnode*)malloc(sizeof(Lnode)); p->data=n;//头节点存储元素个数 p->next=NULL; i=1;//第二个节点开始存储元素 while(i<=p->data) { q=(Lnode*)malloc(sizeof(Lnode)); printf("请输入密码(用回车隔开)\n"); scanf("%d",&t); q->data=t; q->a=i; q->next=p->next; p->next=q; i++; } return p; } Lnode *nizhi(Lnode *p) { Lnode *q,*w;int i;int t; Lnode *r;Lnode *l; q=p->next; l=(Lnode*)malloc(sizeof(Lnode)); l->data=p->data; l->a=p->a; l->next=NULL; i=1;//第二个节点开始存储元素 while(i<=l->data) { r=(Lnode*)malloc(sizeof(Lnode)); r->data=q->data; r->a=q->a; q=q->next; r->next=l->next; l->next=r; i++; } p=l; q=p->next; printf("起始密码顺序为:\n"); for(i=1;q->next;i++) { printf("%d\n",q->data); q=q->next; } printf("%d\n",q->data); q->next=p->next; p=q->next; return p; } 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int length; }Hstr; void main() { Hstr *l,*p,*r; char c,w; int h,j,k; int i=0; l=(Hstr *)malloc(sizeof(Hstr)); p=(Hstr *)malloc(sizeof(Hstr)); r=(Hstr *)malloc(sizeof(Hstr)); l->length=0; p->length=0; r->length=0; printf("请选择相关操作(数字1~5控制,输入0结束)\n"); printf("--------------1.建立串---------------\n"); printf("--------------2.显示串长度-----------\n"); printf("--------------3.生成与原来相同的串---\n"); printf("--------------4.串比较---------------\n"); printf("--------------5.串连接---------------\n"); printf("--------------6.返回值---------------\n"); scanf("%c",&w); getchar(); while(w) { switch(w) { case '1':{printf("请输入字符(#结束):\n"); scanf("%c",&c); while(c!='#') { l->length++; l->ch[i]=c; i++; scanf("%c",&c); } printf("串中字符为\n"); for(i=0;ilength;i++) printf("%c",l->ch[i]); printf("\n"); }break; case '2':{ printf("串长度为%d\n",l->length);}break; case '3':{ for(i=0;ilength;i++) { p->ch[i]=l->ch[i]; } p->length=l->length; printf("复制的串中字符为\n"); for(i=0;ilength;i++) printf("%c",p->ch[i]); printf("\n"); }break; case '4':{i=0; printf("请输入要与原串比较的字符串(#结束):\n"); scanf("%c",&c); while(c!='#') { r->length++; r->ch[i]=c; i++; scanf("%c",&c); } printf("第二个串中字符为\n"); for(i=0;ilength;i++) printf("%c",r->ch[i]); printf("\n"); for(i=0;ilength&&ilength;i++) { if(l->ch[i]!=r->ch[i]) {if((l->ch[i]-r->ch[i])<0){printf("第二个串大"); printf("\n");} if((l->ch[i]-r->ch[i])>0){printf("第一个串大"); printf("\n");} break;} } if(i==r->length||i==l->length)printf("两个串一样大\n"); }break; case'5':{i=0; printf("请输入要与原串连接的串(#结束)\n"); scanf("%c",&c); while(c!='#') {r->length++; r->ch[i]=c; i++; scanf("%c",&c); } printf("第二个串中字符为\n"); for(i=0;ilength;i++) printf("%c",r->ch[i]); printf("\n"); for(i=0,j=0;ilength;i++,j++) l->ch[l->length+i]=r->ch[j]; l->length=l->length+r->length; printf("连接后第一个串中字符为\n"); for(i=0;ilength;i++) printf("%c",l->ch[i]); printf("\n"); }break; case '6':{ i=0; printf("请输入要找串的起始位置(第几个字符?)\n"); scanf("%d",&h); printf("请输入要找的字符个数\n"); scanf("%d",&k); printf("内容为:\n"); for(i=0;ich[h-1]); h++; } printf("\n"); }break; } getchar(); printf("请选择相关操作(数字1~6控制,输入0结束)\n"); printf("--------------1.建立串---------------\n"); printf("--------------2.显示串长度-----------\n"); printf("--------------3.生成与原来相同的串---\n"); printf("--------------4.串比较---------------\n"); printf("--------------5.串连接---------------\n"); printf("--------------6.返回值---------------\n"); scanf("%c",&w); getchar(); } }
本文档为【栈,队列,串的基本操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_448546
暂无简介~
格式:doc
大小:240KB
软件:Word
页数:14
分类:互联网
上传时间:2011-11-21
浏览量:18