• 2022-07-25
    一个双端队列Deque是限定在两端,end1和end2都可以进行插入和删除的线性表。队空条件是end1=end2。若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出在指定端 i ( i =1,2)进行插入enq和删除deq操作的实现。要求:① 当队满时,最多只能有一个元素空间可以是空的。② 在进行两端的插入和删除时,队列中其他元素是一律不动。
  • 解   操作实现如下:FUNC add(Qu:Deque;x:datatype;tag:0..1):integer;BEGIN          CASE tag OF          0:BEGIN                    IF(Qu.end1<>Qu.end2)THEN                   BEGIN                             Qu.elem[Qu.end1]:=x;                             Qu.end1:=(Qu.end1-1)MOD maxsize;                             RETURN((Qu.end1+1)MOD maxsize);                   END                   ELSE return(-1);          END          1:BEGIN                   IF(Qu.end2<>Qu.end1)THEN                   BEGIN                             Qu.elem[Qu.end2]:=x;                             Qu.end2:=(Qu.end2+1)MOD maxsize;                             return((Qu.end2-1)MOD maxsize);                   END                   ELSE return(-1);          ENDENDCASE;{add}ENDF;{add}FUNC delete(Qu:Deque;VAR x:datatype;tag:0..1):integer;BEGIN          CASE tag OF          0:BEGIN                   IF(((Qu.end1+1)MOD maxsize)<>Qu.end2)THEN                   BEGIN                             i:=(Qu.end1+1)MOD maxsize;                             WHILE(i<>Qu.end2)AND(Qu.elem[Qu[i]]<>x)DO                                          i:=(i+1)MOD maxsize;                             IF(Qu.elem[i]=x AND i<>Qu.end2)THEN                             BEGIN                                         j:=i;                                         WHILE((j-1)MOD maxsize<>Qu.end1)DO                                         BEGIN                                                 Qu.elem[j]:=Qu.elem[(j-1)MOD maxsize];                                                 j:=(j-1)MOD maxsize;                                         END                                                 Qu.end1:=(Qu.end1+1)MOD maxsize;return(0);                                         END                                         ELSE return(-1);                             END                             ELSE return(-1);                   END                   1:BEGIN                             IF(((Qu.end2-1)MOD maxsize)<>Qu.end1)THEN                             BEGIN                                         i:=(Qu.end2-1)MOD maxsize;                                         WHILE(I<>Qu.end1)AND(Qu.elem[Qu[i]]<>x)DO                                                   i:=(i-1)MOD maxsize;IF(Qu.elem[i]=x AND i<>Qu.end1)THEN                                         BEGIN                                                   j:=i;                                                   WHILE((j+1)MOD maxsize<>Qu.end2)DO                                                   BEGIN                                                                         Qu.elem[j]:=Qu.elem[(j+1)MOD maxsize];                                                                         j:=(j+1)MOD maxsize;                                                   END                                                   Qu.end1:=(Qu.end2-1)MOD maxsize;                                                   return(0);                                         END                                         ELSE return(-1);                   END{if}                   ELSE return(-1);          END{case 1}          ENDCASE;END;{delete}

    内容

    • 0

      关于数据结构队列的描述正确的是哪些() A: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作 B: 进行插入操作的端称为队尾,进行删除操作的端称为队头 C: 队列中没有元素时,称为空队列 D: 队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出

    • 1

      循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是( )。

    • 2

      队列的插入操作在()____()端进行,删除操作在()____()端进行。栈的插入操作在()____()端进行,删除操作在()____()端进行

    • 3

      所有插入和删除都限定在表的同一端进行的线性表称为 A: 单链表 B: 栈 C: 队列 D: 双端队列

    • 4

      【判断题】栈和队列的不同点是栈只能在一端进行插入删除操作,而队列在不同端进行插入删除操作。