2024.4.7作业

文章介绍了如何使用链栈实现十进制到二进制的转换,通过循环和栈操作完成进制转换,并展示了单向链表队列的创建、入队、出队和遍历功能。
摘要由CSDN通过智能技术生成

1. 栈的进制转换,将十进制转换成二进制。[链栈实现]

思路:循环把余数入栈,循环出栈,直到栈空为址

#ifndef __LOOPLINK__H
#define __LOOPLINK__H

typedef int datatype;
typedef struct  node{
	datatype data;
	struct node * next;
}LinkStack;
LinkStack *  creat_Linkstack(void);
void pushStack(LinkStack* head,datatype  num);
datatype  popStack(LinkStack* head);
void show_Link_stack(LinkStack* head);


#endif
#include <stdio.h>
#include <stdlib.h>
#include "./3_LinkStack.h" 

int main(int argc, const char *argv[])
{
	int num=0,i;
	printf("请输入一个整数>>>");
	scanf("%d",&num);
	int m=num;
	LinkStack *head=creat_Linkstack();
	
	while(num!=1)
	{
	i=num%2;
	num/=2;
	pushStack(head,i);
	}
	pushStack(head,1);
	printf("%d的二进制是>>>",m);
	show_Link_stack(head);
	return 0;
}
/*
 * function:    //创建单向链表
 * @param [ in] 
 * @param [out] 
 * @return      
 */

#include <stdio.h>
#include <stdlib.h>
#include "./3_LinkStack.h" 

LinkStack *  creat_Linkstack(void)
{
	LinkStack * head=(LinkStack*)malloc(sizeof(LinkStack));
	if(NULL==head)
	{
		printf("malloc  error!\n");
		return NULL;
	}
	head->next=NULL;
	return head;
}

/*
 * function:    //头插法入栈
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void pushStack(LinkStack* head,datatype  num)
{
	LinkStack * temp=(LinkStack*)malloc(sizeof(LinkStack));
	if(NULL==temp)
	{
		printf("malloc  error!\n");
		return ;
	}
	temp->data=num;
	temp->next=head->next;
	head->next=temp;
	return ;
}




/*
 * function:    //头删法弹栈
 * @param [ in] 
 * @param [out] 
 * @return      
 */
datatype  popStack(LinkStack* head)
{
	LinkStack* p=head->next;
	datatype num=0;
	if(p==head)
	{
		printf("链表为空,删除失败!\n");
		return (datatype)-1;
	}
	else
	{
		head->next=p->next;
		num=p->data;
		free(p);
		p=NULL;
		return num;
	}
}





/*
 * function:    //遍历
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void show_Link_stack(LinkStack* head)
{
	LinkStack* p=head;
	if(p->next==NULL)
		printf("链表为空,遍历失败!\n");
	while(p->next!=NULL)
	{
		p=p->next;
		printf("%d",p->data);
	}
	putchar(10);
	return ; 
}










 

 

 2、单向链式队列

#ifndef __LINKLISTQUEUE__
#define __LINKLISTQUEUE__
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}linkList_queue;

typedef struct{
linkList_queue* head;
linkList_queue* rear;
}lq_hr;

lq_hr * creat_linkList_queue();
void in_queue(lq_hr* p,datatype num);
datatype out_queue(lq_hr * p);
void show_linkListQueue(lq_hr * p);


#endif
#include <stdio.h>
#include <stdlib.h>
#include "3_Linklist_queue.h"
int main(int argc, const char *argv[])
{
lq_hr * p=creat_linkList_queue();
in_queue(p,100);
in_queue(p,200);
in_queue(p,300);
in_queue(p,400);
show_linkListQueue(p);
datatype num=out_queue(p);
show_linkListQueue(p);
num=out_queue(p);
show_linkListQueue(p);
num=out_queue(p);
show_linkListQueue(p);
num=out_queue(p);
show_linkListQueue(p);
num=out_queue(p);

	return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include "3_Linklist_queue.h"
/*
 * function:    //创建头结点
 * @param [ in] 
 * @param [out] 
 * @return      
 */

lq_hr * creat_linkList_queue()
{
	lq_hr * p=(lq_hr*)malloc(sizeof(lq_hr));
	if(NULL==p)
	{
		printf("lq_hr_malloc error\n");
		return NULL;
	}
	linkList_queue *head=(linkList_queue*)malloc(sizeof(linkList_queue));
	if(NULL==head)
	{
		printf("linkList_malloc error\n");
		free(p);
		p=NULL;
		return NULL;
	}
	p->head=head;
	p->rear=head;
	head->next=NULL;
	return p;

}



/*
 * function:    //入队(尾插法)
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void in_queue(lq_hr* p,datatype num)
{
	linkList_queue* temp=(linkList_queue*)malloc(sizeof(linkList_queue));
	if(NULL==temp)
	{
		printf("malloc error!\n");
		return;
	}
	temp->data=num;
	temp->next=NULL;
	p->rear->next=temp;
	p->rear=temp;

}


/*
 * function:    //判空
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int isEmpty(lq_hr*p)
{
	return p->head==p->rear ? 1:0 ;
}




/*
 * function:    /出队(头删除法)
 * @param [ in] 
 * @param [out] 
 * @return      
 */
datatype out_queue(lq_hr * p)
{
	if(isEmpty(p))
	{
		printf("队列为空,出队失败!\n");
		return (datatype)-1;
	}
	linkList_queue *q=p->head->next;
	datatype num=p->head->next->data;
	p->head->next=p->head->next->next;
	if(p->head->next==NULL)
		p->rear=p->head;
	free(q);
	q=NULL;
	return num;
}


/*
 * function:    //遍历
 * @param [ in] 
 * @param [out] 
 * @return      
 */


void show_linkListQueue(lq_hr * p)
{
	if(isEmpty(p))
	{
		printf("队列为空,遍历失败!\n");
		return;
	}
	linkList_queue *temp=p->head;
	while(temp->next!=NULL)
	{
		printf("%d\t",temp->next->data);
		temp=temp->next;
	}
	putchar(10);
	return;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值