Tải bản đầy đủ (.pdf) (6 trang)

INTRODUCTION TO COMPUTER SCIENCE - PART 4 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (285.68 KB, 6 trang )

INTRODUCTION TO COMPUTER SCIENCE
HANDOUT #4. THE LIST DATA MODEL
K5 & K6, Computer Science Department, Vaên Lang University
Second semester Feb, 2002
Instructor: Traàn Ñöùc Quang
Major themes:
1. Basic Concepts
2. Stacks
3. Queues
Reading: Sections 6.2, 6.6, and 6.8.
4.1 BASIC CONCEPTS
Computer programs usually operate on tables of information. In most cases these
tables are not simply amorphous masses of numerical values; they involve important
structural relationships between the data elements.
In its simplest form, a table might be a linear list of elements, when its relevant
structural properties might include the answers to such questions as: Which element is
first in the list? Which is last? Which elements precede and follow a given one? How
many elements are in the list? In this handout, we only consider linear lists.
Conceptually, a linear list (or simply list) is a finite sequence of zero or more ele-
ments. We generally expect the elements of a list to be of some one type. For example,
if the elements of a list are all of integers, we may call it a list of integers.
Character strings are special lists. In C, a string is stored in an array ending with a
null marker ’\0’. All the library functions have a test for this marker.
Linked Lists
A list may be implemented as a linked list of elements, each is allocated a cell or node
consisting of an area for data and a pointer to the next element in the list, as shown in
the following figure. See more in Section 6.4 (textbook) and Handout #1.
Element 1 Element 2 Element 3 Element 4
Info1 Info2 Info3 Info4

24 INTRODUCTION TO COMPUTER SCIENCE: HANDOUT #4. THE LIST DATA MODEL


4.2 STACKS
A stack is a special kind of lists in which all operations are performed at one end of the
list, which is called the top of the list. The term "LIFO (for last-in first-out) list" is a
synonym for stack.
Because of this restriction, stacks have two specialized operations: push and pop
where push(x) puts the element x on the top of the stack and pop removes the topmost
element from the stack.
The figure illustrates how to use a stack with push and pop operations to compute
the value of the postfix expression 3 4 + 2 ×. The details can be explained in class.
Stacks can be implemented by an array or linked list. We only discuss an array-
based implementation with elements to be of type int.
SYMBOL
PROCESSED
STACK ACTIONS
Initial
3
4
+
2
×
ε
3
3, 4
ε
7
7, 2
ε
14
push 3
push 4

pop 4; pop 3
compute 7 = 3 + 4
push 7
push 2
pop 2; pop 7
compute 14 = 7× 2
push 14
a
0
a
1
a
n−1
. . .
. . .
0
1
n − 1
MAX − 1
4.2 STACKS 25
A smart way to implement a stack by an array is to create a structure consisting of:
1. An array to hold the elements, and
2. A variable top to keep track of the top of stack.
In the listing, we represent the declaration for an array-based stack of integers and
its operations. You should read the listing carefully.
typedef struct {
int A[MAX];
int top;
} STACK;
BOOLEAN isEmpty(STACK *pS)

{
return (pS->top < 0);
}
BOOLEAN isFull(STACK *pS)
{
return (pS->top >= MAX−−1);
}
BOOLEAN pop(STACK *pS, int *px)
{
if (isEmpty(pS))
return FALSE;
else {
(*px) = pS->A[(pS->top)−−−−];
return TRUE;
}
}
BOOLEAN push(int x, STACK *pS)
{
if (isFull(pS))
return FALSE;
else {
pS->A[++(pS->top)] = x;
return TRUE;
}
}
A very important application of stacks is to implement function calls. I recommend
you to read this in Section 6.7 (textbook).
26 INTRODUCTION TO COMPUTER SCIENCE: HANDOUT #4. THE LIST DATA MODEL
4.3 QUEUES
A queue is a restricted form of list in which elements are inserted at one end, the rear,

and removed from the other end, the front. The term "FIFO (first-in first-out) list" is a
synonym for queue.
The intuitive idea behind a queue is a line at a cashier’s window. People enter the
line at the rear and receive service once they reach the front. Unlike a stack, there is
fairness to a queue; people are served in the order in which they enter the line. Thus
the person who has waited the longest is the one who is served next.
Like a stack, there is two specialized operations on queues: enqueue and dequeue;
enqueue(x) adds x to the rear of a queue, dequeue removes the element from the front
of the queue.
As with stacks, an array or linked list can be used to implement queues. For our
purpose, we describe a linked list implementation with the following structure for
cells. As usual, elements are of type int.
typedef struct CELL *LIST;
struct CELL {
int element;
LIST next;
};
A queue itself is a structure with two pointers  one to the front cell and another to
the rear cell.
typedef struct {
LIST front, rear;
} QUEUE;
We also present the listing of operations of queues below. You should read it carefully
to capture why those operations can work properly.
BOOLEAN isEmpty(QUEUE *pQ)
{
return (pQ->front == NULL);
}
BOOLEAN isFull(QUEUE *pQ)
{

return FALSE;
}
4.4 GLOSSARY 27
BOOLEAN dequeue(QUEUE *pQ, int *px)
{
if (isEmpty(pQ))
return FALSE;
else {
(*px) = pQ->front->element;
pQ->front = pQ->front->next;
return TRUE;
}
}
BOOLEAN enqueue(int x, QUEUE *pQ)
{
if (isEmpty(pQ)) {
pQ->front = (LIST) malloc(sizeof(struct CELL));
pQ->rear = pQ->front;
}
else {
pQ->rear->next =
(LIST) malloc(sizeof(struct CELL));
pQ->rear = pQ->rear->next;
}
pQ->rear->element = x;
pQ->rear->next = NULL;
return TRUE;
}
4.4 GLOSSARY
List: Danh sách. See the text.

Linear list: Danh sách tuyến tính.
Linked List: Danh sách liên kết. A physical data structure used to implement high-
level data structures such as lists, trees, graphs, etc. The counterpart of linked lists
is arrays.
Relationship: Mối liên hệ, quan hệ. In computer terminology, relationship informally
stands for relation with a little difference.
Character string, string: Chuỗi ký tự, xâu ký tự. See the text.
Stack: Chồng xếp, ngăn xếp.
top: Đỉnh (chồng xếp).
28 INTRODUCTION TO COMPUTER SCIENCE: HANDOUT #4. THE LIST DATA MODEL
push: Đẩy (vào chồng xếp).
pop: Nhặt, lấy (ra khỏi chồng xếp).
Postfix expression: Biểu thức hậu vò. An expression in which operators are between
their operands.
Declaration: Khai báo. A statement introducing a name or identifier into a program. In
C, every identifier must be declared before use.
Call: Lời gọi. A statement with the name of a function, and perhaps a list of actual
parameters to tranfer control to that function. Also function call or procedure call.
Queue: Hàng đợi. See the text.
front: đầu hàng.
rear: cuối hàng.
enqueue: vào hàng.
dequeue: rời hàng.

×