0
点赞
收藏
分享

微信扫一扫

学习c语言的第二十天

zmhc 2022-03-19 阅读 63
c语言

 栈的建立,插入,删除以及输出操作。

输入:栈的各个结点的值,要插入的结点的值。

输出:栈的各个结点的值,插入元素后栈的各个结点的值,弹出的元素值,弹出元素后栈的各个结点的值。

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

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

stack initstack(){
	stack s;
	s.top=-1;
	int num;
	printf("栈的值为:");
	scanf("%d",&num);
	while(num!=-1){
		s.top++;
		s.data[s.top]=num;
		scanf("%d",&num);
	}
	return s;
}
stack push(stack s,int e){
	if(s.top==maxsize){
		printf("越界"); 
		return s;
	}
	s.top++;
	s.data[s.top]=e;
	return s;
}

bool  pop(stack *s,int *e){
	if(s->top==-1){
		return false;
	}

	*e=s->data[s->top];
	s->top--;
	return true;
}
int print(stack s){
	if(s.top==-1){
		printf("NULL");
		return NULL;
	}
	int i;
	for(i=0;i<=s.top;i++){
		printf("%d ",s.data[i]);
	}
} 


int main (){
	stack s=initstack();
	printf("\n"); 	
	printf("栈的值为:");
    print(s);
    printf("\n"); 
	printf("要加入的元素值为:");
	int e;
	scanf("%d",&e);	
	printf("\n"); 
	printf("加入元素后栈的值为:");
	stack s1=push(s,e);
    print(s1);
    printf("\n"); 
    printf("弹出的元素值为:");
    pop(&s1,&e);
    printf("%d",e); 
    printf("\n"); 
    printf("弹出元素后栈的值为:");
    print(s1);
    
}

队列的建立,插入,删除以及输出操作。

输入:队列的各个结点的值,要插入的结点的值。

输出:队列的各个结点的值,插入元素后队列的各个结点的值,弹出的元素值,弹出元素后队列的各个结点的值。

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

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

typedef struct {
	int data[maxsize];
	int front;
	int rear;
}sequene;

sequene initquene(){
	sequene q;
	q.front=-1;
	q.rear=-1;
	printf("请输入队列的值");
	int num;
	scanf("%d",&num);
	while(num!=-1){
		q.rear++;
		q.data[q.rear]=num;
		scanf("%d",&num);	
	}
	return q;
}


int print(sequene q){
	if(q.front==q.rear){
		printf("队列为空 ");
		return NULL;
	}
	int i=0;
	while(q.front!=q.rear){
		q.front++;
	    printf("%d ",q.data[q.front]);
	}
}

void enquene(sequene *q,int e){
	if((q->rear-q->front)==maxsize){
		printf("队列已满");
		return 0;
	}
	q->rear++;
	q->data[q->rear]=e;
	
} 

void outquene(sequene *q,int *e){
	if(q->rear==q->front){
		printf("队列为空");
		return 0;
	}
	*e=q->data[q->front];
	q->front++;
}

int main(){
	sequene q=initquene();
	printf("队列:");
	print (q);
	int num;
	printf("\n");
	printf("要插入的值为:");
	printf("\n");
	scanf("%d",&num);
	enquene(&q,num);
	printf("队列:");
	print(q);
	printf("弹出的值为:");
	printf("\n");
	outquene(&q,&num);
	printf("%d",num); 
	printf("\n");
	printf("队列:");
	print(q);
}
 

两个数组共有以及不共有的元素 

输入:两个数组各自的长度以及值。

输出:两个数组的值,两个数组共有的值,两个数组不共有的值。

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

#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>
#define maxsize 5

int main (){
	int n,m;
	printf("输入的第一个数组的数字个数"); 
	scanf("%d",&n);
	int a[n];
	int i=0;
	int num;
	while(i<n){
		printf("a[%d]的值",i); 
		scanf("%d",&num);
		a[i]=num;
		i++;
	}
	printf("输入的第二个数组的数字个数");
	scanf("%d",&m);
	int b[m];
	i=0;
	while(i<m){
		printf("b[%d]的值",i); 
		scanf("%d",&num);
		b[i]=num;
		i++;
	}
	i=0;
	while(i<n){
		printf("\n");
		printf("a[%d]的值%d",i,a[i]); 
		i++;
	}
	i=0;
	while(i<m){
		printf("\n");
		printf("b[%d]的值%d",i,b[i]); 
		i++;
	}
	int c[n+m];
	int q,w,e=0;
	for(q=0;q<n;q++){
		for(w=0;w<m;w++){
			if(a[q]==b[w]){
				c[e]=a[q];
				e++;
				break;
			}
		}
	}
	int p=0;
	printf("相同的值为:"); 
	while(p<e){
		printf("\n");
		printf("%d ",c[p]); 
		p++;
	}
	int j;
	printf("不同的值为:");
	for(i=0;i<n;i++){
		for(j=0;j<e;j++){
			if(a[i]!=c[j]){
				printf("%d ",a[i]);
			}
		}
	} 
	for(i=0;i<m;i++){
		for(j=0;j<e;j++){
			if(b[i]!=c[j]){
				printf("%d ",b[i]);
			}
		}
	} 
}

  求矩阵各行元素之和 

输入:m*n的矩阵的值。

输出:每行输出对应矩阵行元素之和。

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

#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>
#define maxsize 5
#include<string.h>
#include<string.h>
int main()
{
    int m,n,k,sum=0;
    scanf("%d%d",&m,&n);
    int a[m][n];
    int i,j;
    for(i=0;i<m;i++)
        for( j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for( i=0;i<m;i++)
    { 
        sum=0;
        for( j=0;j<n;j++)
            sum+=a[i][j];
        printf("%d\n",sum);
    }
    return 0;
}

今天复习了栈和队列的一些基本操作,复习了一些数组的内容,明天也会继续复习数组和字符串的内容。

举报

相关推荐

0 条评论