线性表之五,C++代码(学堂在线,华南理工大学)

数据结构List,叫列表,也叫线性表。栅栏fence的概念,也就是操作定位。

List的抽象模板类代码:

 1 /* class List */
 2 template <class Elem>
 3 class List
 4 {
 5 public:
 6     //set the position of the fence
 7     virtual bool setPos(int pos) = 0;
 8     //insert an element
 9     virtual bool insert(const Elem& e) = 0;
10     //remove an element
11     virtual bool remove(Elem& e) = 0;
12 };

Alistl类的模板类代码:

 1 /* class AList */
 2 const int DefaultListSize = 100;
 3 template <class Elem>
 4 class AList:public List<Elem>
 5 {
 6 private:
 7     Elem* listArray;//Array holding list
 8     int maxSize; //Maximum size of list
 9     int listSize; //Actual elem count
10     int fence; //Position of fence;
11 public:
12     AList(int size=DefaultListSize){
13         listArray = new Elem[size];
14         maxSize = fence = 0;
15     }
16     ~AList(){delete[] listArray;}
17     //重写虚函数要声明
18     virtual bool setPos(int pos);
19     virtual bool insert(const Elem& e);
20     virtual bool remove(Elem& e);
21     bool getValue(Elem& it)const;
22 };
23 //set the Position of the fence
24 template <class Elem>
25 bool AList<Elem>::setPos(int pos){
26     if((pos>=0)&&(pos<=listSize))//判断是否在合理的区间
27         fence = pos;
28     return (pos>=0)&&(pos<=listSize);
29 }
30 //get the first element after the fence
31 template <class Elem>
32 bool AList<Elem>::getValue(Elem& it)const{
33     if(fence == listSize) return false;//判断是否重叠
34     else{
35         it = listArray[fence];
36         return true;
37     }
38 }
39 template <class Elem>
40 bool AList<Elem>::insert(const Elem& item){
41     if(listSize == maxSize) return false;//判断是否有空间
42     //Shift Elems up to make room
43     for(int i=listSize; i>fence; i--)
44         listArray[i] = listArray[i-1];
45     listArray[fence] = item;
46     listSize++;//Increment list size
47     return true;
48 }
49 template <class Elem>
50 bool AList<Elem>::remove(Elem& it){
51     if(fence == listSize) return false;
52     it = listArray[fence];//Copy Elem
53     for(int i=fence; i<listSize; ++i)
54         listArray[i] = listArray[i+1];
55     listSize--; //Decrement size
56     return true;
57 }

链表结点模板类代码:

1 //list node
2 template <class Elem>
3 class Node{
4 public:
5     Elem element;//Value for this node
6     Node* next; //Pointer to next node
7     Node(const Elem& elemval,Node* nextval = NULL)
8     {element = elemval; next = nextval;}
9 };

LList模板类代码:

 1 template <class Elem>
 2 class LList:public List<Elem>
 3 {
 4 private:
 5     Node<Elem>* head;//Point to list header
 6     Node<Elem>* tail;//Pointer to last Elem
 7     Node<Elem>* fence;//Last element on left
 8     int length; //Length of list
 9 public:
10     LList()
11     {
12         fence = head = tail = new Node<Elem>;
13         length = 0;
14     }
15     virtual bool getValue(Elem& it)const;
16     virtual bool insert(const Elem& item);
17     virtual bool remove(Elem& it);
18     virtual bool setPos(int pos);
19 };
20 template <class Elem>
21 bool LList<Elem>::getValue(Elem& it)const{
22     if(fence == tail) return false;
23     it = fence->next->element;
24     return true;
25 }
26 template <class Elem>
27 bool LList<Elem>::insert(const Elem& item){
28     fence->next = new Node<Elem>(item,fence->next);
29     if(tail == fence) tail = fence->next;
30     length++;
31     return true;
32 }
33 template <class Elem>
34 bool LList<Elem>::remove(Elem& it){
35     if(fence->next == NULL) return false;
36     it = fence->next->element;//Remember value_comp
37     Node<Elem>* ltemp = fence -> next;
38     fence->next = ltemp->next;//Remove
39     if(tail == ltemp)
40         tail = fence; //Reset tail
41     delete ltemp;//Reclaim space
42     length--;
43     return true;
44 }
45 template <class Elem>
46 bool LList<Elem>::setPos(int pos){
47     if((pos < 0) || (pos > length))
48         return false;
49     fence = head;
50     for(int i=0; i<pos; ++i)
51         fence = fence->next;
52     return true;
53 }

Stack抽象模板类代码:

 1 //Stack abstract class
 2 template <class Elem>
 3 class Stack
 4 {
 5 public:
 6     //Push an element onto the top of the stack
 7     virtual bool push(const Elem& e) = 0;
 8     //Remove the element at the top of the stack
 9     virtual bool pop(Elem& e) = 0;
10     //Get a copy of the top element in the stack
11     virtual bool topValue(Elem& e) const = 0;
12     //Return the number of element in the stack
13     virtual int length() const = 0;
14     //Reinitialize the stack
15     virtual void clear() = 0;
16 };

基于数组的栈模板类代码:

 1 //Array-based stack implementation
 2 template <class Elem>
 3 class AStack:public Stack<Elem>
 4 {
 5 private:
 6     Elem* listArray;//Array holding stack elements
 7     int size; //Maximum size of stack
 8     int top; //The position to insert the new element
 9 public:
10     AStack(int sz)
11     {
12         size = sz;
13         top = 0;
14         listArray = new Elem[sz];
15     }
16     ~AStack(){delete[] listArray;}
17     virtual bool push(const Elem& item);
18     virtual bool pop(Elem& it);
19 };
20 template <class Elem>
21 bool AStack<Elem>::push(const Elem& item){
22     if(top == size) return false; //Stack is full
23     else{
24         listArray[top++] = item;
25         return true;
26     }
27 }
28 //pop top element
29 template <class Elem>
30 bool AStack<Elem>::pop(Elem& it){
31     if(top == 0) return false;
32     else{
33         it = listArray[--top];
34         return true;
35     }
36 }

队列抽象模板类代码:

 1 template <class Elem>
 2 class Queue
 3 {
 4 public:
 5     virtual bool enqueue(const Elem& e) = 0;
 6     virtual bool dequeue(Elem& e) = 0;
 7     virtual bool frontValue(Elem& e) = 0;
 8     virtual int length() const = 0;
 9     virtual void clear() = 0;
10 }

基于链表的队列模板类代码:

原文地址:https://www.cnblogs.com/GoldenEllipsis/p/12106546.html

时间: 2024-11-09 13:29:49

线性表之五,C++代码(学堂在线,华南理工大学)的相关文章

数据结构(一)--线性表

一.线性表(list) 定义:由零个或多个数据元素组成的有限序列 (1.首先它是一个序列,也就是说元素之间是有先来后到的.2.若元素存在多个,则第一个元素无前驱,而最后一个元素无后继.3.list是有限的) 若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素. list的元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表. 0 抽象数据类型(ADT) 定义:一个数学模型以及定义在此数学模型上的一组操

数据结构与算法分析(线性表实现)

★线性表是一个序列(线性结构),具有一定的顺序 ★如果有多个元素,第一个元素没有前驱,最后一个元素没有后继 ★线性表强调是有限的 一.线性表基本存储结构 ㈠.顺序表 --把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里,用这种方法存储的线性表简称顺序表 --在顺序表中,线性表的逻辑顺序与物理顺序一致 --在顺序表中,数据元素之间的关系是以元素在计算机内"物理位置相邻"来体现 ㈡.单链表 --把线性表的元素任意存放在存储单元结点中,节点之间按照逻辑顺序通过一个个指针依次链接起来

数据结构-线性表的一些基础操作 c++代码

//线性表的顺序存储结构 template <class T> class Linearlist { public: Linearlist(int MaxListSize == 10); ~Linearlist() { delete []element; } bool IsEmpty() const { return length == 0; } bool IsFull() const { return length == MaxSize; } int Length() const { ret

《数据结构》C++代码 线性表

线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储).代码里天天用,简单写写. 首先是数组,分静态.动态两种,没什么可说的,注意动态的要手动释放内存就好了. 其次是链表,依旧分静态.动态.课内一般都是讲的是动态实现,但其实还有一种静态实现方法.动态实现剩内存,但是静态实现剩时间,考试的时候当然是要视情况而定的.但是我估计,课内考试应该不会去卡这个时间,所以大家应该是不用担心(仅仅是个人看法,真被数据卡了别找我……). 特别说明,静态链表实现,应当在开始申请够足够的内存,大家尽量在没有内

数据结构:线性表插入一次删除一次的代码

#include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <stack> #include <queue> #include <cstdio> using namespace std; int insertsqlist(int weizhi,double charu,int *t,double b[]){   

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <io.h> #include <math.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSI

【数据结构】线性表&amp;&amp;顺序表详解和代码实例

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 预备知识 1.0 什么是线性表? 线性表(List)是零个或者多个数据元素的有限序列. 首先它是一个序列.里面的元素是有顺序的,如果有多个元素,除开头和结尾以外的元素都有一个前驱和一个后继.而开头元素只有后继,结尾元素只有前驱. 其次线性表是有限的,也就是里面的元素个数是有限的. 1.1 线性表的基本操作(描述) 1ADT 线性表(List) 2Data 3    线性表的数据对象集合为{a1, a2, a3, ...

线性表的链式存储(C代码实现)

线性表的链式存储结构 线性表的实现分顺序存储结构和链式存储结构. 上一节我们学学习了线性表的实现分顺序存储结构,并实现解顺序存储的基本操作. 这一节我们来学习线性表链式存储结构,那我们再想象一下我为什么我们要引入链式存储结构,万物存在必有其道理 主要还是因为线性存储结构存在着这样一个问题:当我们需要插入和删除元素时,就必须挪动大量与之无关的元素,因为线性存储结构结点与节点之间的关系是相邻关系,一个节点挨着一个节点 如为了插入或者删除一个元素移动大量的元素,这样就降低了程序运行效率. 当我们引入

顺序线性表的代码实现

1.采用一个数组实现一个顺序线性表中添加元素.删除元素等基本操作 1 package com.ietree.basic.datastructure.Sequence; 2 3 import java.util.Arrays; 4 5 /** 6 * 顺序线性表 7 * 8 * @param <T> 9 * @author Dylan 10 */ 11 public class SequenceList<T> { 12 13 private final int DEFAULT_SIZ