学习c语言的第二十六天

 栈的基本操作

输入:栈的各个结点的值num。

输出:输出栈的各个结点的值。

优化目标:可能没有优化目标。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>;
#define maxsize 100
typedef struct {
	int data[maxsize];
	int top;
}stack; 

bool push(stack *s,int e){
	if(s->top+1==maxsize){
		return false;
	}
	s->data[s->top]=e;
	s->top++;
	return true;
}

bool pop(stack *s,int *e){
	if(s->top==0){
		return false;
	}
	s->top--;
	*e=s->data[s->top];
	return true;
} 

int main(){
	stack s;
	int e;
	int i; 
	s.top==0;
	printf("要输入多少"); 
	scanf("%d",&e); 
	while(e!=-1){
		push(&s,e);
		printf("要输入多少"); 
	    scanf("%d",&e); 
	}
	while(s.top!=0){
		pop(&s,&i);
	    printf("弹出的值为%d",i); 
	}
}

 

 队列的基本操作

输入:队列的各个结点的值e。

输出:输出队列的各个结点的值。

优化目标:可能没有优化目标。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>;
#define maxsize 100

typedef struct {
	int front;
	int rear;
	int data[];
}quene;

bool enquene(quene *q,int e){
	if(q->rear-q->front==maxsize){
		return false;
	}
	q->data[q->rear]=e;
	q->rear++;
	return true;
	
}
bool out(quene *q,int *e){
	if(q->rear==q->front){
		return false;
	}
	*e=q->data[q->front];
	q->front++;
	return true;
}
int main(){
	quene q;
	int e,i;
	q.front=q.rear=0;
	printf("要输入多少"); 
	scanf("%d",&e); 
	while(e!=-1){
		enquene(&q,e);
		printf("要输入多少"); 
	    scanf("%d",&e); 
	}
	while(q.rear!=q.front){
		out(&q,&i);
		printf("%d ",i);
	}
}

 

输入:字符串s1和字符串s2的值

输出:不含字符串s2的字符串s1

优化目标:可能没有优化目标。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>;
#define maxsize 100
int main()
{
	char a[maxsize];
	gets(a);
	char b[maxsize];
	gets(b);
	int len1,len2;
	len1=strlen(a);
	len2=strlen(b);
	int i,j,k;
	int flag=1;
	int f;
	while(flag){
	    for(i=0; i<len1; i++){
            flag=0;
			if(a[i]==b[0]){
				f=1;
				for(j=i,k=0; k<len2; j++,k++)
					if(a[j]!=b[k]){
						f=0; //有一个不同则不需要删除 
						break;
					}
				if(f){//删除的情况 
					flag=1;
					for(; j<len1; j++,i++)
						a[i]=a[j];
					for(; i<len1; i++)
						a[i]='\0';
					break;
				}
			}
			len1=strlen(a);
		}
	}
	puts(a);
 
}

这道题虽然做过但是再做时仍然出现了问题,若输入的数组b恰好在数组a的结尾位置时,如:a:hcat b:cat,还是出现了问题,后来翻看自己之前的笔记发现,如果已经删除了一个串b,可以加入一个f=1的标志,使得程序再次重新查找是否有相同的几位字母,这样就能解决问题。

输入:一行文本,其中以空格分隔为若干个单词,以.结束。

输出:每个单词中的字母数。

优化目标:可能没有优化目标。

#include<stdio.h>
#include<string.h>

int main(){
	char c;
	int f=0;
	while(1){
		int a=0;
		scanf("%c",&c);
		while(c!=' '&c!='.'){
			a++;
			scanf("%c",&c);
		}
 
		if(a!=0){
			f++;
			if(f==1)
                printf("%d",a);
            else
                printf(" %d",a); 
		}
 
		if(c=="."){
			break;
		} 
	}
 
}

因为临近测试,所以今天复习了一部分之前觉得有困惑的题目,更像是一种思路上的复习,代码还是要多复习才能更熟悉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值