如何用c语音编写(如何使用c语言编写程序)?如果你对这个不了解,来看看!
如何轻松使用 C 语言实现一个栈?,下面是CSDN给大家的分享,一起来看看。
如何用c语音编写
作者 | 写代码的篮球球痴
什么是数据结构?
数据结构是什么?要了解数据结构,我们要先明白数据和结构,数据就是一些int char 这样的变量,这些就是数据,如果你是一个篮球爱好者,那么你的球鞋就是你的数据,结构就是怎么把这些数据排列组合,怎么把数据摆放好才能方便你找到这些数据,把数据和结构合在一起理解就是所谓的数据结构,简单点,就是处理数据的方式方法。
平时在家里面,你有没有随便摆放自己的鞋子,然后要找鞋子的时候要花费非常多是时间,可能你老婆也很生气,每天都乱摆鞋子导致她打扫卫生非常麻烦,然后有一天,你买了一个非常酷的鞋架,有了这个鞋架之后,你的鞋子终于有家了,这个鞋架就是起到处理鞋子的作用了。
什么是栈?
栈可以理解为数据结构中的一种,这种数据结构的特点是先进去的人「数据」后出来,就像下面的图片一样,如果栈是一个洞,人「数据」只能从洞的一个口进去,然后出来也只能从一个口出来,而且洞的宽度就只能容纳一个人「数据」,好了,那先进去的那个人「数据」最傻逼了,一定要等后面进来的人「数据」都先出去了才能出去。
用 C 语言实现一个栈
我写代码是很水的,之前有一个同学写了一个栈让我检查,我看了下,好像我写代码的能力比他厉害一些,代码比较简单,然后讲一下几个比较重要的函数,希望大家在面试的时候,随手就甩出一个栈“砸死”面试官,哈哈。
#include "stdio.h"#include "stdlib.h"struct List{int data;struct List * next;};struct Stack{struct List *head;int size;};struct Stack * StackInit(void){struct Stack *stack = ;stack = (struct Stack*)malloc(sizeof(struct Stack));stack->head = (struct List *)malloc(sizeof(struct List));stack->head->next = ;stack->size = 0;return stack;}int StackPush(struct Stack *stack,int data){struct List *tmp = (struct List *)malloc(sizeof(struct List));tmp->data = data;tmp->next = stack->head->next;stack->head->next = tmp;stack->size++;//printf("push:%d \n",data);return 0;}int IsStackEmpty(struct Stack *stack){/*如果头指针指向下一个为空,说明栈为空*/if(stack->head->next == )return 1;elsereturn 0;}int StackPop(struct Stack *stack,int *data){struct List *tmp = ;if(IsStackEmpty(stack))return -1;tmp = stack->head->next;*data = tmp->data;stack->head->next = tmp->next;stack->size--;free(tmp);//printf("pop:%d \n",*data);return 0;}int main(void){int i = 0;struct Stack *stack = ;stack = StackInit;for(i = 0;i<5;i++){StackPush(stack,i);}for(i = 0;i<5;i++){int data = 0;StackPop(stack,&data);printf("%d ",data);}printf("\n");return 0;}1-栈头部
栈头部,也就是栈顶指针,我们用指针单链表实现一个栈,一定要知道这个栈顶的指针,有头就有栈,没有头,这个栈也就跨了。
struct Stack *stack = ;stack = StackInit;这个就是定义一个栈,也就是malloc出来一个内存,专门存这个栈顶的。
2-出栈
出栈的方法跟我之前说的差不多,只不过出栈代码上需要做判断。
int StackPop(struct Stack *stack,int *data){struct List *tmp = ;if(IsStackEmpty(stack))return -1;tmp = stack->head->next;*data = tmp->data;stack->head->next = tmp->next;stack->size--;free(tmp);//printf("pop:%d \n",*data);return 0;}先判断这个栈是不是空的,是不是空的判断方法就是通过判断head->next的指针是否为空。
然后把head->next 这个位置的数据取出来,取出来后,再把head->next的指针指向 取出来这个位置 的next 位置。
然后再记得free掉。就Ok了。
3-入栈
入栈的操作和出栈的操作刚好相反,就是改变一下位置和指针的指向。
int StackPush(struct Stack *stack,int data){struct List *tmp = (struct List *)malloc(sizeof(struct List));tmp->data = data;tmp->next = stack->head->next;stack->head->next = tmp;stack->size++;//printf("push:%d \n",data);return 0;}用数组来实现一个栈
数组本身是一种数据结构,使用数组实现一个栈也是非常简单方便的,大家请看。
#include "stdio.h"#include "stdlib.h"/*栈的大小*/#define LENGHT (100)struct Stack{int stack_array[LENGHT];unsigned int size;//栈动态长度};struct Stack * StackInit(void){struct Stack *stack = ;stack = (struct Stack*)malloc(sizeof(struct Stack));stack->size = 0;return stack;}int StackPush(struct Stack *stack,int data){if(stack->size >= LENGHT){printf("stack is full\n");return (-1);}stack->stack_array[stack->size] = data;stack->size++;//printf("push:%d size:%d\n",data,stack->size);return 0;}int IsStackEmpty(struct Stack *stack){/*如果头指针指向下一个为空,说明栈为空*/if(stack->size == 0)return 1;elsereturn 0;}int StackPop(struct Stack *stack,int *data){stack->size--;if(IsStackEmpty(stack))return -1;*data = stack->stack_array[stack->size];//printf("pop:%d size:%d\n",*data,stack->size);return 0;}int main(void){int i = 0;struct Stack *stack = ;stack = StackInit;for(i = 0;i<20;i++){StackPush(stack,i);}for(i = 0;i<21;i++){int data = 0;StackPop(stack,&data);printf("%d \n",data);}printf("\n");return 0;}总结
既然有栈,就会有和栈不一样的数据结构,有一种数据结构叫做队列,栈的数据结构特点是先进后出,队列的数据结构特点是先进先出,有点意思,栈和队列做驱动的同学很少需要自己写代码实现,正常情况下都是SDK集成了方法,直接调用接口就好了,但是写应用的同学,经常要自己实现一个栈或者队列,特别是大企业面试,这些算是非常基础的题目,最好是闭着眼睛就能写出来的那种。
【End】
如何使用c语言编写程序
1 C语言特点C语言程序主要由函数构成一个C语言程序有且只有一个main函数,可含其它函数多个函数可以写在一个文件,也可以写在不同文件C语言程序是从main函数开始执行的main函数可以调用其它函数其它函数之间可以互相调用,其它函数不能调用主函数被调用的函数可以是系统库函数,也可以是自定义函数2 基本结构// 头文件 #include <stdio.h>// 主函数,程序的入口函数int main(void) { /* C语言第一个程序 */ printf("hello world\n"); return 0; }一个C语言程序基本结构一般由头文件、主函数和其它函数组成。
3 头文件#include <stdio.h> // 头文件# 代表预处理指令include 文件包含指令,只能包含头文件或源文件xxx.h // 头文件 xxx.c // 源文件<stdio.h>格式引用的是系统头文件,"stdio.h"格式引用的是用户头文件#include <stdio.h> // 系统头文件 #include "stdio.h" // 用户头文件用到哪个函数,就需要包含该函数的头文件4 主函数int main(void) { // 主函数,程序的入口函数 ...... return 0; }C语言程序执行是从主函数开始执行的;main函数执行结束,意味着程序执行结束;一个C程序,有且只有一个main函数,多个则会报错;主函数是直接运行自动调用,其它函数需要人为调用。5 案例
编写add.c文件
int add(int x, int y) { return x +y; }main.c引入函数头文件
// 系统头文件#include <stdio.h>// 用户头文件#include "add.c" int main() { int res = add(10, 30); printf("%d\n", res); return 0; }