前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言数据结构栈和队列代码实现

c语言数据结构栈和队列代码实现

作者头像
洁洁
发布2023-10-10 13:28:09
1580
发布2023-10-10 13:28:09
举报
文章被收录于专栏:小洁叫你mysql

这期内容就不详细具体展开了,但该有的代码还是有的,学习数据结构重点就是要亲自把代码实现,所以如果您再自己亲自写代码的过程中有什么疑问欢迎大家评论区讨论。

废话不多说直接上代码。

目录

1.栈代码实现          1.1主要功能介绍

2.队列代码实现     2.1主要功能介绍     


                                          1.栈代码实现

1.1主要内容:  栈的初始化、元素入栈、元素出栈、获取栈顶元素、打印栈。

    其实栈是在链表表尾进行插入和删除的线性表。

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
                // 定义变量结构体  与单链表类似
typedef struct node
{
	int data;
	struct node* next;
}Node;
                // 初始化
Node* initStack()
{
	Node* S = (Node*)malloc(sizeof(Node));
	assert(S);
	S->data = 0;
	S->next=NULL;
	return S;
}
                       //插入函数(尾插)
void push(Node* s,int x)
{
	Node* node = (Node*)malloc(sizeof(node));
	assert(node);
	node->data = x;
	node->next = s->next;
	s->next = node;
	s->data++;
}
                    // 判断栈是否为空,  为后面出栈做准备
int is_emepty(Node* S)
{
	if (S->data == 0 || S->next == NULL)
		return 1;
	else
		return 0;
}
                   //  此函数能获取栈顶元素
int Gettop(Node* S)
{
	if (is_emepty(S))
		return -1;
	else
		return S->next->data;
}
                   //  出栈函数(尾删)
int pop(Node* S)
{
	int d;

	Node* node = S->next;
	if (is_emepty(S))        //判断是否是空栈
	{
		return -1;
	}
	else
	{
		d = node->data;
		S->next = node->next;
		return d;
	}
	
}
                       // 栈打印函数
void printStack(Node* S)
{
	Node* node = S->next;
	while (node != NULL)       //循环遍历
	{
		printf("%d->", node->data);
		node = node->next;
	}
	printf("NULL\n");
}
               //主函数调用其他子函数
int main()
{
	Node* S = initStack();
	push(S, 1);
	push(S, 2);
	push(S, 3);
	pop(S);
	printf("%d\n", Gettop(S));
	printStack(S);
	return 0;
}

      2.队列代码实现

2.1 主要内容: 队列初始化、入队、出队、打印队列。

其实队列时只能在一端插入,另一端删除的线性表。

代码语言:javascript
复制
#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct node
{
	int data;
	struct node* next;
}Node;
                     //队列的初始化
Node* initQueue()
{
	Node* Q = (Node*)malloc(sizeof(Node));
    assert(Q);
	Q->next = NULL;
	Q->data = 0;        // 用来记录元素个数
	return Q;
}
                     //判断队列是否为空
int is_emepty(Node* Q)
{
	if (Q->data == 0 || Q->next == NULL)
		return 1;
	else
		return 0;
}
                     //入队 尾插
void enQueue(Node* Q, int data)
{
	Node* q = Q->next;
	Node* node = (Node*)malloc(sizeof(Node));
	assert(node);
	if (is_emepty(Q))
	{
		Q->next = node;
		node->data = data;
		node->next = NULL;
	}
	else
	{
		/*for (int i = 0; i < Q->data; i++) 
		{
			q = q->next;
		}*/
		while (q->next)                  //两种找到尾结点的方式
		{
			q = q->next;
		}
		q->next = node;
		node->data = data;
		node->next = NULL;
	}
	Q->data++;
}
			         //出队 头出
void deQueue(Node* Q)
{
	Node* node = Q->next;
	if (is_emepty(Q))
		return;
	else
	Q->next = node->next;
	free(node);
	node = NULL;
	Q->data--;
}
                     // 打印函数
void printQueue(Node* Q)
{
	Node* node = Q->next;
	while (node)
	{
		printf("%d->", node->data);
		node = node->next;
	}
	printf("NULL\n");
}
                     //主函数调用
int main()
{
	Node* Q = initQueue();
	enQueue(Q, 1);
	enQueue(Q, 2);
	deQueue(Q);
	printf("%d\n", Q->data);
	printQueue(Q);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •                                           1.栈代码实现
  •       2.队列代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档