用c语言实现基本数据结构(栈)
准备用c语言将所有基本数据结构实现一遍,从栈开始。
下面是int类型的栈,结构体如下
typedef struct{
int top;
int n;
int *s;
}Stack;
方法
void init_stack(Stack *stack, int n) //给struct中的s指针初始化n个int空间
int pop(Stack *stack)//出栈
int push(Stack *stack, int val)//入栈
int del_list(int *s, int len,int num)
int del_info(Stack *stack, int i)//删除相应序号(从栈底到栈顶的顺序)的数据
int find_value(Stack *stack, int v)//返回相应序号(从栈底到栈顶的顺序)的数据的值
void print_stack(Stack *stack)//输出栈内的所有数据
完整代码
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int top;
int n;
int *s;
}Stack;
void init_stack(Stack *stack, int n){
stack->n = n;
stack->s = calloc(n, sizeof(int));
stack->top = 0;
}
int pop(Stack *stack){
//get and del
if(stack->top > 0){
int re = *(stack->s + stack->top);
stack->top--;
return re;
}else{
printf("/nstack has empty/n");
}
}
int push(Stack *stack, int val){
if(stack->top < stack->n){
*(stack->s + stack->top) = val;
stack->top++;
return 1;
}else{
printf("\nit has full\n");
return 0;
}
}
int del_list(int *s, int len,int num){
for(int i = num; i < len-1; i++){
s[i] = s[i+1];
}
}
int del_info(Stack *stack, int i){
//del from info
del_list(stack->s, stack->top, i);
stack->top--;
}
int find_value(Stack *stack, int v){
//find info and return by finding first value from top to buttom
for(int i = 0; i < stack->top; i++){
if(*(stack->s + i) == v ){
return i;
}
}
printf("\nnot find\n");
return -1;
}
void print_stack(Stack *stack){
printf("value: ");
for(int i = 0; i < stack->top; i++){
printf("%d ", *(stack->s + i));
}
printf("\n");
}