链栈或者链队列为啥需要做两个结构体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链栈或者链队列为啥需要做两个结构体?相关的知识,希望对你有一定的参考价值。

你们看:
链栈
typedef struct StackNode
ElemType data;
struct StackNode *next;
StackNode, *LinkStackPtr;

typedef struct
LinkStackPtr top;
int count;
LinkStack;

链队列
typedef struct QNode
ElemType data;
struct QNode *next;
QNode, *QueuePtr;

typedef struct
QueuePtr front, rear;
LinkQueue;

参考技术A 这里的LinkStack和LinkQueue用来表示“栈”和“队列”作为一个整体的对象,而StackNode和QNode用来表示节点。虽然也可以用首节点来表示整体,但是比较容易引起误解。

数据结构第十一篇——链队列

链式存储的队列称为链队列。和链栈类似,用单链表来实现链队,根据队列的FIFO原则,为了操作上的方便,分别需要一个头指针和尾指针。队头在链头,队尾在链尾。链式队列在进队时无队满问题,但有队空问题。队空条件为front->next==NULL。

链队描述如下:

 1 struct Qnode
 2 {
 3     Data data;
 4     QNode *next;
 5 };
 6 
 7 class Queue
 8 {
 9     QNode *front;
10     QNode *rear;
11     
12     public:
13         Queue()
14         {
15             rear=front=new QNode;
16             front->next=NULL;
17         }
18         ~Queur()
19         {
20             ClearQueue();
21             delete front;
22         }
23         
24         void EnQueue(Data item);    //入队 
25         Data DeQueue();            //出队 
26         Data GetFront();            //取队头元素值 
27         void ClearQueue();            //清空队列 
28         bool IsEmpty();                //判断空否 
29         int  Length();                 //求元素个数 
30 }

链队的操作算法描述如下:

 1 //入队操作
 2 void Queue::EnQueue(Data item)
 3 {
 4     rear->=next=new QNode;
 5     rear=rear->next;
 6     rear->data=item;
 7     rear->next=NULL: 
 8 }
 9 
10 //出队操作
11 Data Queue::DeQueue()
12 {
13     QNode *p;
14     if(!IsEmpty())
15     {
16         p=front->next;
17         Data retvalue=p->data;
18         front->next=p->next;
19         delete p;
20         
21         if(front->next==NULL)
22         real=front;
23         return retvalue;
24     }
25     else
26     {
27         cout<<"the Queue is empty"<<endl;
28         exit(0);
29     }
30 } 
31 
32 //取队头元素的值
33 Data Queue::GetFront()
34 {
35     if(!IsEmpty())
36     return front->next->data;
37     else
38     {
39         cout<<"the Queue is empty"<<endl;
40         exit(0);
41     }
42 }
43 
44 //清空队列
45 void Queue::ClearQueue()
46 {
47     rear=front->next;
48     while(rear!=NULL)
49     {
50         front->next=rear->next;
51         delete rear;
52         rear=front->next;
53     }
54     rear=front;
55 } 
56 
57 //判断空否 
58 bool Queue::IsEmpty()
59 {
60     return (front->next==NULL);
61 }
62 
63 //计算队列长度 
64 int Queue::Length()
65 {
66     int cnt=0;
67     QNode *p=pront->next;
68     while(p)
69     {
70         cnt++;
71         p=p->next;
72     }
73     return cnt;
74 }

 

 优先级队列

  队列是以FIFO顺序访问元素的数据结构,它从中删除“最老的”元素。实际应用中常需要另外一种队列,它删除优先级最高的元素。这种结构被称为优先级队列,主要有插入和删除操作。

  具体实现不再细说,和普通队列仅在删除操作有些许差别。

以上是关于链栈或者链队列为啥需要做两个结构体?的主要内容,如果未能解决你的问题,请参考以下文章

链栈和链队列的类实现

链栈和链队列的建立及基本操作

数据结构学习笔记(栈队列)整理与总结

数据结构学习笔记(栈队列)整理与总结

C++中能不能用结构体模板

栈和队列