数据结构(栈)c/c++/java实现
栈是一种只能在一端进行插入或删除的线性表,表中能够进行删除和插入的一段称为栈顶。
比如插入数字1,2,3,4。栈顶元素就为4,从栈顶向栈底看下去,数字依次是4,3,2,1。
java基本实现
通过在类中进行基本的数据操作
public class Stack{
private int count;
private int[] data;
public Stack(){
data=new int[5];
count=-1;
}
public void add(int num){
count++;
data[count]=num;
}
public boolean isEmpty(){
return count == -1;
}
public boolean pop(){
if(count==-1){
return false;
}
else {
count--;
return true;
}
}
public int getTop(int wrongNum){
if(count!=-1){
return data[count];
}
return wrongNum;
}
}
实现了一些基本的操作,但是上面的代码会有问题,因为一开始的时候数组的长度是固定的,所以对于数据特别大的时候会出现错误。
c语言的实现和上面的类似,通过基本类型的操作就能完成。
通过链表实现链表栈,解决大量数据的问题
其实我们 经常用到的数据结构,java中的LinkedList和 ArrayList都是一种可以存储大量数据的数据结构,
LinkedList通过实现链表的方法,ArrayList通过动态数组的方法。
在这里我们通过链表的方法实现,链表栈。
根据栈的特性,肯定选用头插法。
建立结构体
struct Stack
{
int data;
Stack *next;
}
Stack *stack;
Stack *r;
void creatStack()
{
stack=(Stack*)malloc(sizeof(Stack));
stack->next=NULL;
}
void add(int num)
{
r=(Stack*)malloc(sizeof(Stack));
r->next=stack->next;
stack->next=r;
}
这里通过单链表头插法进行创建,同时也可以通过双链表实现。
java的实现和这个类似,通过创建单链表实现操作。这里不再列举。
如果有错误欢迎指正。