A Structured Programming Approach to Data

Similar documents
A Structured Programming Approach to Data

Understanding and Writing Compilers

Fundamentals of Operating Systems

New Syllabus Mathematics for 0-Level 1

Assembly Language Assembled for the Sinclair ZX81

--(1977b), 'Finite State Machine Theory and Program Design: A Survey', Computer Studies Quarterly, 1, to be published.

Fundamentals of Operating Systems. Fifth Edition

Fundamentals of Computer Science

COMPUTATIONAL DYNAMICS

Computer Literacy - A Beginners' Guide

Macmillan Computer Science Series

Program and Electronic Projects for the SSC, Electron and Spectrum Computers

Mastering. Pascal and Delphi Programming

MASTERING COBOL PROGRAMMING

An Introduction to Programming with IDL

Workbook for C++ THIRD EDITION. Yedidyah Langsam, Ph.D. Brooklyn College of the City University of New York. Custom Publishing

Network Performance Analysis

Mastering. Spreadsheets Q

0 Mastering Microsoft Office

Functional Programming Using F#

FUZZY LOGIC WITH ENGINEERING APPLICATIONS

The Commodore 64 in Action

Graphics Programming in c++

Preface. and Its Applications 81, ISBN , doi: / , Springer Science+Business Media New York, 2013.

PROGRAM EXECUTION DYNAMICS. Samuel Dellette Patton. A thesis submitted in partial fulfillment of the requirements for the degree.

Analysis of Algorithms

Unlocking the Power of OPNET Modeler

PERFORMANCE ANALYSIS OF REAL-TIME EMBEDDED SOFTWARE

MACMILAN MASTER SBUEI

Programming in Haskell

Topological Structure and Analysis of Interconnection Networks

COMPONENT-ORIENTED PROGRAMMING

ITSM: An Interactive Time Series Modelling Package for the pe

CLASSIC DATA STRUCTURES IN JAVA

Fundamentals of Discrete Mathematical Structures

The Internet of Things

Inside Relational Databases with Examples in Access

Interfacing with C++

INTRODUCTION TO PROGRAMMING WITH C++ (2ND EDITION) BY Y. DANIEL LIANG

Computer Science Workbench. Editor: Tosiyasu L. Kunii

MODERN MULTITHREADING

High-Performance Parallel Database Processing and Grid Databases

An Ontological Framework for Contextualising Information in Hypermedia Systems.

St. MARTIN s ENGINERING COLLEGE Dhulapally,Secunderabad

SDH/SONET Explained in Functional Models

The Calculi Of Lambda Conversion. (AM-6) (Annals Of Mathematics Studies) By Alonzo Church READ ONLINE

Concrete Abstractions

Scheduling in Distributed Computing Systems Analysis, Design & Models

Things A Computer Scientist Rarely Talks About (Lecture Notes) By Donald E. Knuth READ ONLINE

TASK SCHEDULING FOR PARALLEL SYSTEMS

DATA ABSTRACTION AND PROBLEM SOLVING WITH JAVA

Iterative Methods in Combinatorial Optimization

Australian Standard. Industrial automation systems and integration Open systems application integration framework

Windows and Graphics Programming with Visual C ++

Exploiting Distributed Resources in Wireless, Mobile and Social Networks Frank H. P. Fitzek and Marcos D. Katz

Mastering. C Programming 0

CPSC 2380 Data Structures and Algorithms

Chapter 1. Introduction

Foundations of 3D Graphics Programming

EXPANDING AND NETWORKING MICROCOMPUTERS

Australian Standard. Records Management. Part 1: General AS ISO ISO

COURSE OUTLINE. IST 253 Database Concept 3 Course Number Course Title Credits

THE DESIGNER S GUIDE TO VERILOG-AMS

Publication Data. Reading Options. Licence and permissions ISBN Mark Jago, 2007

Relational Database Index Design and the Optimizers

A First Course in Statistical Programming with R

CPSC 331 Term Test #2 March 26, 2007

Barnes & Noble NOOK Study BLTI Tool for Moodle Admin & User Guide version For Moodle 2.2 with BasicLTI for Moodle V2.0.

OPERATIONS RESEARCH. Dr. Mohd Vaseem Ismail. Assistant Professor. Faculty of Pharmacy Jamia Hamdard New Delhi

Organizing Information. Organizing information is at the heart of information science and is important in many other

Table of Contents. Chapter 1: Introduction to Data Structures... 1

Graph Theory With Applications By John Adrian Bondy;U.S.R. Murty READ ONLINE

SymbolicC++: An Introduction to Computer Algebra using Object-Oriented Programming

Information and documentation Records management. Part 1: Concepts and principles AS ISO :2017 ISO :2016

Functional Programming in R

COSO Enterprise Risk Management

Barnes & Noble NOOK Study BLTI Tool for Moodle Admin & User Guide for version Moodle 1.9 and 2.0 with BasicLTI4Moodle v1.0.

Anany Levitin 3RD EDITION. Arup Kumar Bhattacharjee. mmmmm Analysis of Algorithms. Soumen Mukherjee. Introduction to TllG DCSISFI &

MULTIMEDIA DATABASE MANAGEMENT SYSTEMS

The Art of Lisp Programming

LOGICAL DATA MODELING

Numerical Methods. with Computer. Programs C++ Pallab Ghosh

A Programming Approach with C DHARMENDER SINGH KUSHWAHA

An Object Oriented Programming with C

DESIGN AND VALIDATION OF COMPUTER PROTOCOLS

THE VERILOG? HARDWARE DESCRIPTION LANGUAGE

Computation Independent Model (CIM): Platform Independent Model (PIM): Platform Specific Model (PSM): Implementation Specific Model (ISM):

Barnes & Noble NOOK Study BLTI Tool for Sakai Admin & User Guide for version Sakai 2.7 v1.0.0 May 2011

INTRODUCTION TO MATHEMATICAL PROOFS: A TRANSITION (TEXTBOOKS IN MATHEMATICS) BY CHARLES ROBERTS

HOW TO DESIGN A SMALL SWITCHING LAYOUT BY LANCE MINDHEIM DOWNLOAD EBOOK : HOW TO DESIGN A SMALL SWITCHING LAYOUT BY LANCE MINDHEIM PDF

HTML5 MOBILE WEBSITES

Programming with Turing and Object Oriented Turing

Research on Industrial Security Theory

INVERSE PROBLEMS IN GROUNDWATER MODELING

Introduction to Algorithms Third Edition

MacmUI8D Computer Science Series Consulting Editor: Professor F.H. Sumner, University of Manchester

Failure-Modes-Based Software Reading

Using MSC/NASTRAN: Statics and Dynamics

INSTITUTE OF AERONAUTICAL ENGINEERING (Autonomous) Dundigal, Hyderabad

CS 210 Algorithms and Data Structures College of Information Technology and Engineering Weisberg Division of Engineering and Computer Science

Transcription:

A Structured Programming Approach to Data

Macmillan Computer Science Series Consulting Editor: Professor F. H. Sumner, University of Manchester J. K. Buckle, The ICL 2900 Series Andrew J. T. Colin, Programming and Problem-solving in Algol68 S. M. Deen, Fundamentals of Data Base Systems David Hopkin and Barbara Moss, Automata A. Learner and A. J. Powell, An Introduction to Algol 68 through Problems A. M. Lister, Fundamentals of Operating Systems Brian Meek, Fortran, PL/I and the Algols I. R. Wilson and A. M. Addyman, A Practical Introduction to Pascal

A Structured Programming Approach to Data Derek Coleman Department of Computation, U MIST

Derek Coleman 1978 All rights reserved. No part of this publication may be reproduced or transmitted, in any form or by any means, without permission. First published 1978 by THE MACMILLAN PRESS LTD London and Basingstoke Associated companies in Delhi Dublin Hong Kong Johannesburg Lagos Melbourne New York Singapore and Tokyo British Library Cataloguing in Publication Data Coleman, Derek A structured programming approach to data. -(Macmillan computer science series). 1. Structured programming I. Title 001.6'42 QA76.6 ISBN 978-0-333-21943-0 ISBN 978-1-349-15981-9 (ebook) DOI 10.1007/978-1-349-15981-9 This book is sold subject to the standard conditions of the Net Book Agreement. The paperback edition of this book is sold subject to the condition that it shall not, by way of trade or otherwise, be lent, resold, hired out, or otherwise circulated without the publisher's prior consent in any form of binding or cover other than that in which it is published and without a similar condition including this condition being imposed on the subsequent purchaser.

Contents Preface Acknowledgements 1. An Overview of Program Design 1.1 Introduction - The Software Crisis 1.2 Objectives of Program Design 1.3 The Heart of the Problem 1.4 Stepwise Refmement 1.5 What Do We Mean When We Say a Program 'Works'? 1.6 Summary 1. 7 Bibliographical Notes 2. Program Design Notation 2.1 An Abstract Programming Language 2.2 Structuring Control 2.3 Structuring Data 2.4 What is a Data Structure? 2.5 Unstructured Data Types 2.6 Implementation of Unstructured Types 2.7 Summary 2.8 Bibliographical Notes 3. Arrays 3.1 Array Structures 3.2 Arrays and Functions 3.3 Implementation of Arrays 3.4 Summary 3.5 Bibliographical Notes 4. Simple Data Structuring 4.1 Record Types 4.2 Implementation of Record Types ix xi 1 1 2 3 4 4 5 5 6 6 6 15 16 17 19 19 20 21 21 22 24 26 26 27 27 29

vi Contents 4.3 Use of Structured Types 4.4 Variant Types 4.5 Implementation of Variant Types 4.6 Summary 4.7 Bibliographical Notes 29 31 34 34 35 5. On Program Design 36 5.1 Stepwise Refinement of Programs 5.2 Two Examples 5.3 Summary 5.4 Bibliographical Notes 36 37 47 48 Exercises 1 49 6. 7. Set Structures 6.1 Introduction 6.2 Set Operations 6.3 Use of Set Structures 6.4 Implementation of Set Structures 6.5 Summary 6.6 Bibliographical Notes The Class Construct 7.1 Using and Implementing Data Structures 7.2 Classes 7.3 Implementation of Classes 7.4 Summary 7.5 Bibliographical Notes 53 53 54 56 59 64 65 66 66 68 71 79 79 8. Dynamic Data Structures 8.1 Introduction 80 8.2 Basic Implementation Techniques for Dynamic Data Structures 83 8.3 Linear Linked Lists 84 8.4 Storage Management for Dynamic Data Structures 8.5 Linear Linked List Implementation of Integersets 8.6 Summary 8. 7 Bibliographical Notes 80 87 88 94 94 9. Sequences 95 9.1 Introduction 9.2 Operations on Sequences 9.3 Storage Structures for Sequences 9.4 Queues 95 98 104 108

Contents vii 9.5 Summary 111 9.6 Bibliographical Notes 111 Exercises 2 113 10. Simple Searching Techniques 116 10.1 Sparse Mappings 116 I 0.2 Sparsity and Searching II7 I0.3 Linear Search II8 I 0.4 Merge Search I21 I0.5 Binary Search 123 I0.6 Properties of Binary Searching 124 I0.7 Summary 126 I0.8 Bibliographical Notes 127 11. Hashing Techniques 128 Il.l Introduction 128 11.2 Choice of a Hashing Function 130 11.3 Collision Handling by Open Addressing 131 Il.4 Ordered Hashing 134 11.5 Chained Hashing I38 Il.6 Efficiency of Hashing Methods 139 Il.7 Summary I40 Il.8 Bibliographical Notes 140 12. Recursion and Recursive Algorithms I4I 12.1 Recursion I41 I2.2 Mechanics of Recursion 144 I2.3 Removal of Recursion 146 12.4 Recursion in the Design of Algorithms 150 12.5 Conclusion I 56 12.6 Summary 157 I2.7 Bibliographical Notes 157 13. Binary Search Trees 158 I3.1 Introduction 158 13.2 Operations on Binary Trees 162 I3.3 Binary Search Trees 164 13.4 The Shape of Binary Search Trees 171 13.5 Implementation of Binary Trees 173 13.6 Conclusion I80 13.7 Summary 180 13.8 Bibliographical Notes 180

viii Contents Exercises 3 14. Designing Programs From Data Structures Exercises 4 References Index 14.1 Introduction 14.2 Traversing Binary Trees 14.3 Input of Advanced Data Structures 14.4 Program Construction Ru1es 14.5 Systematic Design of File Processing Programs 14.6 Conclusion 14.7 Summary 14.8 Bibliographical Notes 181 187 187 187 192 198 201 209 209 209 210 217 221

Preface Much of current programming practice is basically empirical and ad hoc in approach. Each problem is tackled without relation to those that have gone before; experiences are made and stored as a series of fragments. Now, under the pressure of events, this unsatisfactory state of affairs is coming to an end. Programming is becoming a technology, a theory known as structured programming is developing. The purpose of a theory is to categorise and explain existing practice, thus enabling it to be improved through the development of new and sharper techniques. The resulting experiences have then to be fed back into the theory so that the process of enrichment may continue. This dialectical relationship between theory and practice is essential to a healthy programming technology. The lack of such a relationship in the 1950s and 60s and the accompanying software crisis certainly confirm the converse of this proposition. My aim in writing this book has been to explain the current state of the theory of structured programming, so that it may be used to improve the reader's practice. The book deals with two facets of programming- how to design a program in terms of abstract data structures and how to represent the data structures on real and bounded computers. The separation between program design and data structure representation leads to more reliable and flexible programs. The introduction and use of an abstract programming language as the notation for expressing both program design and the structure of data ensures, as far as is possible, that the description is machine and language independent. The reader can use the notation (or his own personal variant) for the design of structured programs whatever the actual language to be used. The ease of this task depends largely on the suitability of the language for structured programming. Some languages, such as BASIC, are clearly quite inadequate for the task owing to the paucity of their semantics. Other languages such as Pascal and its derivatives, embody in practical and tested form, the theory of structured programming. Of necessity, therefore, I have adopted a Pascal-like notation. The book constitutes a second-level self-contained text on the role of data structuring in programming and therefore assumes a knowledge of the basic concepts of programming in a high-levellanguage. It has evolved from the second-year undergraduate lecture course on 'Data Structures' that I have given at UMIST over the past six years. It presents as a coherent whole the ideas of Dijkstra, Hoare and Wirth on structured programming together with the earlier

X Preface work of Knuth on data structures. It is hoped that the book will prove useful to all computation and computer science students doing a further course on programming, as well as to the professional programmer in commerce or industry. It is to be emphasised, however, that the ideas discussed in this book are meant to be put into use and tested in the everyday programming activity of the reader. Without interaction with practice they are dead and meaningless. I have included four sets of exercises covering all the material in the book and have attempted to avoid questions that can be answered by direct quotation from the text. The exercises generally relate to material in more than one chapter and have been grouped accordingly. Life seldom presents us with clear-cut exercises of the form given here; it is therefore to real life that the reader should look for meaningful practice of the concepts discussed in this book.

Acknowledgements I owe a great deal to Professor J. S. Rohl of the University of Western Australia, who first encouraged me to set my ideas down in book form. I would also like to thank Geoff King and the many other UMIST students who have contributed to this book in numerous ways. David Watt, Clive Coleman, Ronan Sleep and John Reynolds all read the draft manuscript and made many helpful comments and suggestions. I have also received much advice and assistance from my colleagues at UMIST, and for this I am extremely grateful. Special thanks go to Mrs I. Betton, Miss M. O'Brien and Mrs B. Sharples, who had the unenviable task of typing the manuscript. Finally I would like to thank Joan, Abra and Robert Coleman for all their support while this book was in preparation. DEREK COLEMAN