Eddie Chen


A Front-End Web Developer;

A fakegeek studying at Uestc;

A boy who loves the logic and structure of coding;


Resume

Project List

+

福州金玉堂网站

form 2011 - 2012

福州金玉堂企业网站开发

页面重构, jQuery开发, 基于Ajax的在线聊天子系统, 实时期货价格图表生成(基于Ajax&jsonp)

→ View website

+

diandian.com 数个模板开发

+

中国技术供需在线

form 2011 - 2012

中国技术供需在线-教育部全国高校产学研合作公共服务网络平台

负责一期项目后端开发, 数据库设计

基于PHP, CI框架开发

→ View website

+

电子科技大学校工会新版网站

2011

电子科技大学校工会新版网站

负责后台开发(PHP+CI)以及项目管理

→ View website

+

电子科技大学科技处网站

2010

电子科技大学科技处网站

负责部分页面重构

→ View website

Skill

HTML

80%

CSS & CSS3

70%

Javascript

80%

PHP

60%
*skill scores are based on the test provided by Elance.com.

Blog

恶补基础之数据结构学习笔记--栈与队列篇(一)--栈


前言


恶补数据结构的第二天, 栈与队列. 之前面试被鄙视的阴影挥之不去, 好在化备份为力量了. 今天主要学习的是栈的实现&应用, 主要是介绍两种实现, 顺序栈 & 链栈. 还是尽量保持每天一篇博文, 健康向上的节奏吧.

栈(Stack) 是限定仅在表尾进行插入和删除操作的线性表.

尽管限定了操作, 但是还是属于线性表, 因此适用于线性表的存储实现也适用于栈, 栈的实现方式主要是两种: 顺序栈(数组实现), 链栈(链表实现).

栈的ADT

ADT 栈(stack)

Data 
    同线性表, {a1, a2, a3, a4, …, an}, 除a1外, 每个元素只有一个前驱, 除an外, 每个元素只有一个后驱.

Operation
    InitStack()
    DestroyStack()
    ClearStack()
    StackEmpty()
    GetTop()
    Push()
    Pop()
    StackLength()

endADT

栈的实现方式

  • 数组实现
  • 链表实现

栈的两种实现方式在操作上的效率都是一样的O(1), 区别在于内存利用率, 和栈的长度限制上. 顺序栈需要预先给定最大长度, 链栈在允许范围内可以任意增长, 但是需要额外的内存开销来存贮next

链栈代码实现

链栈代码实现 in C

//  main.c
//  Stack
//
//  Created by Eddie Chen on 5/9/13.
//  Copyright (c) 2013 Dreamfly. All rights reserved.
//

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

typedef int DataType;

typedef struct Node
{
    DataType data;
    struct Node * next;
} Node,*StackPtr;

typedef struct LinkedStack
{
    StackPtr top;
    int count;
}LinkedStack;

void initStack(LinkedStack * L)
{
    L->count = 0;
    L->top = NULL;
}

void stackPush(LinkedStack * L, DataType e)
{
    Node * n = (Node *)malloc(sizeof(Node));
    n->data = e;
    n->next = L->top;
    L->top = n;
    L->count ++;
}

void stackPop(LinkedStack *L, DataType * e)
{
    if(L->top == NULL)
        //empty stack
        return;
    *e = L->top->data;
    Node * tmp = L->top;
    L->top = L->top->next;
    free(tmp);
    L->count --;
}

void clearStack(LinkedStack *L)
{
    Node * tmp;
    while (L->top != NULL) {
        tmp = L->top;
        L->top = L->top->next;
        free(tmp);
        L->count --;
    }
}

int stackEmpty(LinkedStack *L)
{
    return L->top == NULL ? 1 : 0;
}

int main(int argc, const char * argv[])
{
    return 1;
}

总结

栈是比较简单也比较常用的一种数据结构, 应用范围很广, 比较典型的一个例子是四则运算的实现,(近期写一个实现挂上来). 恶补基础很辛苦, 但是也很有必要.


Date:

About

This is Eddie Chen, a front-end web developer, a member of Dreamfly Studio of UESTC.
Keep in touch:
haozi[a,t]haozi.name


Powered by Eddie Chen.