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

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


前言:


恶补基础第三天,队列部分.队列也是相对比较简单,但是非常常用的数据结构,常用到你每按一个按键,实际上都是操作系统在处理输入队列.队列是限定了FIFO操作的的一种线性表,所以无外乎还是两种类型的实现:数组和链表..

队列ADT

Data
    和线性表一样, 除头尾外每个元素有相应唯一的前驱和后驱.

Operation
    InitQueue()
    DestoryQueue()
    ClearQueue()
    QueueEmpty()
    GetHead()
    EnQueue()
    DeQueue()
    QueueLength()

endADT

循环队列


队列的首尾相接的顺序存储结构称为循环队列, 这种实现可以在出队时不挪动其他队列元素, 保证了效率.

C语言实现:

//
//  main.c
//  Circular Queue-Array
//
//  Created by Eddie Chen on 5/10/13.
//  Copyright (c) 2013 Dreamfly. All rights reserved.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef int DataType;

typedef struct
{
    DataType data[MAX];
    int front;
    int rear;
}Queue;

int initQueue(Queue *Q)
{
    Q->front = 0;
    Q->rear = 0;
    return 0;
}

int queueLen(Queue *Q)
{
    return (Q->rear - Q->front + MAX) % MAX;
}

int enQueue(Queue *Q, DataType e)
{
    if ((Q->rear +1) % MAX == Q->front) {
        return -1;
    }
    Q->data[Q->rear] = e;
    Q->rear = (Q->rear + 1) % MAX;
    return 0;
}

int deQueue(Queue *Q, DataType *e)
{
    if( Q->front == Q->rear)
        return -1;
    *e = Q->data[Q->front];
    Q->front = (Q->front + 1) % MAX;
    return 0;
}

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

队列链式存储实现


尾进头出的单链表 C语言实现如下:

//
//  main.c
//  Queue-Linked-List
//
//  Created by Eddie Chen on 5/10/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, * NodePtr;

typedef struct Queue
{
    NodePtr front;
    NodePtr rear;
}Queue;

int initQueue(Queue * Q)
{
    NodePtr HEAD = (NodePtr)malloc(sizeof(Node));
    HEAD->next = NULL;
    Q->front = HEAD;
    Q->rear = HEAD;

    return 0;
}

int enQueue(Queue *Q, DataType e)
{
    NodePtr n = (NodePtr)malloc(sizeof(Node));
    n->data = e;
    n->next = NULL;
    Q->rear->next = n;
    Q->rear = n;
    return 0;
}

int deQueue(Queue *Q, DataType *e)
{
    if (Q->front == Q->rear) {
        //empty Queue
        return -1;
    }
    *e = Q->front->next->data;
    NodePtr tmp = Q->front->next;
    Q->front->next = Q->front->next->next;
    if (Q->rear == tmp) {
        Q->rear = Q->front;
    }
    free(tmp);
    return 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.