C语言 表、栈和队列详解及实例代码

C语言 表、栈和队列详解及实例代码

什么是表、栈和队列

表是一种动态的数据结构,它的每个元素都包含一个指向下一个元素的指针。表常用于构建链表,提供了动态插入和删除元素的能力。

栈是一种先进后出的数据结构,它具有压入和弹出操作,插入和删除元素均在栈顶执行。栈在编程中可用于实现函数的调用、表达式求值等。

  • 队列

队列是一种先进先出的数据结构,它具有入队和出队操作,插入和删除元素均在队尾和队头执行。

C语言表的实例代码

#include <stdio.h>
#include <stdlib.h>

struct node {
    int value;
    struct node *next;
};

void print_list(struct node *head) {
    struct node *current = head;
    while (current != NULL) {
        printf("%d ", current->value);
        current = current->next;
    }
    printf("\n");
}

void insert_node(struct node **head, int num) {
    struct node *new_node = (struct node *)malloc(sizeof(struct node));
    new_node->value = num;
    new_node->next = NULL;
    if (*head == NULL) {
        *head = new_node;
    } else {
        struct node *current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = new_node;
    }
}

void delete_node(struct node **head, int num) {
    if (*head == NULL) {
        return;
    }
    struct node *current = *head;
    if (current->value == num) {
        *head = current->next;
        free(current);
        return;
    }
    while (current->next != NULL && current->next->value != num) {
        current = current->next;
    }
    if (current->next != NULL) {
        struct node *to_delete = current->next;
        current->next = to_delete->next;
        free(to_delete);
    }
}

int main() {
    struct node *head = NULL;
    insert_node(&head, 5);
    insert_node(&head, 10);
    insert_node(&head, 15);
    insert_node(&head, 20);
    print_list(head);
    delete_node(&head, 15);
    print_list(head);
    return 0;
}

上面这段代码展示了如何使用C语言来为链表实现动态插入、删除和遍历。

C语言栈和队列的实例代码

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10

int stack[MAX_SIZE];
int top = -1;

void push(int num) {
    if (top >= MAX_SIZE - 1) {
        printf("Stack Overflow\n");
        return;
    }
    top++;
    stack[top] = num;
}

void pop() {
    if (top == -1) {
        printf("Stack Underflow\n");
        return;
    }
    top--;
}

int peek() {
    if (top == -1) {
        return -1;
    }
    return stack[top];
}

int is_empty() {
    return top == -1;
}

int is_full() {
    return top == MAX_SIZE - 1;
}

void print_stack() {
    int i;
    printf("Stack: ");
    for (i = 0; i <= top; i++) {
        printf("%d ", stack[i]);
    }
    printf("\n");
}

struct queue {
    int front;
    int rear;
    int arr[MAX_SIZE];
};

struct queue *create_queue() {
    struct queue *q = (struct queue *)malloc(sizeof(struct queue));
    q->front = -1;
    q->rear = -1;
    return q;
}

void enqueue(struct queue *q, int num) {
    if (q->rear >= MAX_SIZE - 1) {
        printf("Queue Overflow\n");
        return;
    }
    if (q->front == -1) {
        q->front = 0;
    }
    q->rear++;
    q->arr[q->rear] = num;
}

void dequeue(struct queue *q) {
    if (q->front == -1 || q->front > q->rear) {
        printf("Queue Underflow\n");
        return;
    }
    q->front++;
}

int is_queue_empty(struct queue *q) {
    return q->front == -1 || q->front > q->rear;
}

int peek_queue(struct queue *q) {
    if (q->front == -1 || q->front > q->rear) {
        return -1;
    }
    return q->arr[q->front];
}

void print_queue(struct queue *q) {
    int i;
    printf("Queue: ");
    for (i = q->front; i <= q->rear; i++) {
        printf("%d ", q->arr[i]);
    }
    printf("\n");
}

int main() {
    push(1);
    push(2);
    push(3);
    print_stack();
    pop();
    print_stack();
    printf("Top element: %d\n", peek());
    printf("Stack is empty: %d\n", is_empty());
    printf("Stack is full: %d\n", is_full());
    struct queue *q = create_queue();
    enqueue(q, 10);
    enqueue(q, 20);
    enqueue(q, 30);
    print_queue(q);
    dequeue(q);
    print_queue(q);
    printf("Front element: %d\n", peek_queue(q));
    printf("Queue is empty: %d\n", is_queue_empty(q));
    return 0;
}

这段代码演示了如何使用C语言为栈和队列实现动态插入、删除和查询操作。两个示例中使用了数值型数据,用户可以根据实际需求修改数据类型和数据数量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 表、栈和队列详解及实例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C++进一步认识类与对象

    C++进一步认识类与对象 类与对象是什么? 在 C++ 中,类是一种自定义的数据类型,它可以封装数据和函数。每个类都可以实例化出多个对象,这些对象都有共同的数据类型和函数行为,称为类的实例或对象。 类的定义 定义一个类,需要确定以下内容: 类的名称 类的数据成员 类的成员函数 下面是一个简单的类的定义: class Box { public: double …

    C 2023年5月22日
    00
  • C/C++高精度算法的实现

    C/C++高精度算法的实现攻略 什么是高精度算法? 在计算机上进行数学运算通常都是使用二进制来表示数字,而二进制可以在内存中用 0 和 1 表示。在使用标准类型(如 int, long)时,它们可以很方便地执行大量的数学运算。但是,对于较大的数字或需要较高精度的计算,这些类型可能无法满足需求,因为它们只能容纳有限数量的比特,从而有限表示。基于这些原因诞生了高…

    C 2023年5月23日
    00
  • C 程序结构

    C 程序结构 C 语言程序一般由三部分组成,它们分别是: 预处理部分 主函数 子函数 预处理部分 预处理部分是在程序编译前执行的,主要作用是进行宏定义、条件编译、头文件包含等处理。 预处理命令都以#开头,常用的预处理命令有 #include、#define、#ifdef、#ifndef、#endif 等,其中 #include 用于包含头文件,#define…

    C 2023年5月10日
    00
  • 比特币真的值得长期持有和投资吗一文弄懂

    “比特币真的值得长期持有和投资吗” 完整攻略 1. 什么是比特币? 比特币是一种基于区块链技术的加密数字货币,由匿名的发明者“中本聪”在2009年发布。比特币的交易和管理是通过去中心化的方式进行,独立于中央机构或政府控制。 2. 比特币的特点 2.1 去中心化 比特币的交易和管理不需要中央机构或政府控制,而是由全球网络的节点共同维护、管理。 2.2 匿名性 …

    C 2023年5月22日
    00
  • C语言实现扫雷经典游戏

    C语言实现扫雷经典游戏攻略 概述 扫雷经典游戏是一种利用逻辑推理完成的益智游戏。本攻略将详细讲解如何使用C语言实现扫雷经典游戏。 准备工作 在开始编写代码前,需要安装C语言编译器。常用的C语言编译器有GCC、Clang等,可根据自己的喜好选择。此外,还需要使用到C语言中的标准库函数,如rand()、time()等,需要确保它们的头文件stdlib.h和tim…

    C 2023年5月23日
    00
  • 学习C语言的第一天

    今天学习C语言学习了三个部分: 第一个部分是软件环境的搭建,如何搭建一个项目 使用工具:visual studio 2010 搭建过程:新建项目、配置设置(主要是解决运行后一闪而过的问题) 第二部分是编写一个简单的C语言程序代码 #include<stdio.h> //引入头文件 io指的是输入与输出 int main(){ //不可少的入口函数…

    C语言 2023年4月18日
    00
  • C++中对象与类的详解及其作用介绍

    C++中对象与类的详解及其作用介绍 什么是对象? 在面向对象编程语言中,可以通过类来定义对象。对象是类的一个实例化,是由数据和方法组成的。 一个类可以被当作模板,从而创建多个对象。每个对象都可以访问类中的方法和变量,但是每个对象都有自己的一套数据副本。 什么是类? 类是一种用户定义的数据类型,它封装了数据和方法。数据成员表示类的属性,方法成员表示类的操作。 …

    C 2023年5月22日
    00
  • Qt写入Json文件的方法详解(含源码+注释)

    下面我就为您详细讲解一下“Qt写入Json文件的方法详解(含源码+注释)”这篇文章。 一、前言 本文主要介绍Qt中如何使用QJsonDocument来进行Json的操作,其中包括Json文件的读取、写入及解析等操作。该文档由以下几个部分构成: Json的基础知识——介绍了Json的基础知识和理解 Qt中Json的API使用——介绍了整个Qt中Json相关AP…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部