C语言使用ADT有什么好处,请用代码举例说明。
时间: 2024-02-24 18:55:47 浏览: 147
使用ADT(抽象数据类型)可以将数据结构和操作进行封装,隐藏内部实现细节,提高代码的可读性、可复用性和可维护性。下面是一个使用ADT的例子,实现了一个简单的栈(Stack)数据结构:
```
// Stack.h
#ifndef STACK_H
#define STACK_H
typedef struct Stack {
int top;
int capacity;
int *array;
} Stack;
Stack* createStack(int capacity);
void deleteStack(Stack *stack);
int isFull(Stack *stack);
int isEmpty(Stack *stack);
void push(Stack *stack, int item);
int pop(Stack *stack);
int peek(Stack *stack);
#endif
```
```
// Stack.c
#include "Stack.h"
#include <stdlib.h>
Stack* createStack(int capacity) {
Stack *stack = (Stack*) malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = capacity;
stack->array = (int*) malloc(sizeof(int) * capacity);
return stack;
}
void deleteStack(Stack *stack) {
free(stack->array);
free(stack);
}
int isFull(Stack *stack) {
return stack->top == stack->capacity - 1;
}
int isEmpty(Stack *stack) {
return stack->top == -1;
}
void push(Stack *stack, int item) {
if (isFull(stack)) return;
stack->array[++stack->top] = item;
}
int pop(Stack *stack) {
if (isEmpty(stack)) return -1;
return stack->array[stack->top--];
}
int peek(Stack *stack) {
if (isEmpty(stack)) return -1;
return stack->array[stack->top];
}
```
上面的代码中,Stack.h 定义了栈的抽象数据类型,包括了栈的结构体和函数声明;Stack.c 实现了这些函数的具体操作。使用这个栈的时候,只需要包含 Stack.h 头文件,即可使用其中提供的函数,而不需要关心内部实现细节。这种封装可以避免用户误操作导致的错误,也方便了代码的维护和升级。
阅读全文