本实验取材于姥姥《数据结构(第2版)》
顺序存储,链式存储?哪个更优秀?视情况而定,一种是已经告诉你分配大小,另一种见一个插一个,更对内存产生良好的影响,见机行事。
学会这些基本的存储方式,到底为了什么?数据结构的拓扑图掌握了吗?
- 表–》树–》图–》查找–》排序
每一个内容的延伸都是对基础的再夯实,如果一味追求上层建筑,比如树的线索化和树的其他应用,就会对基础再次拷问,也就是基础不牢,地动山摇的感觉。
下面给出源码:
//队列的链式存储
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode Position;
typedef struct QNode *PtrToQNode;
struct QNode{
Position Front,Rear;
int MaxSize;
};
typedef PtrToQNode Queue;
Queue CreateQueue(int MaxSize){
Queue Q = malloc(sizeof(struct QNode));
PtrToNode s = malloc(sizeof(struct Node));
Q->Front = Q->Rear = NULL;
Q->MaxSize = MaxSize;
s->Next = NULL;
return Q;
}//构建一个堆栈的头结点,返回该节点指针
int IsemptyQ(Queue Q){
return (Q->Front==NULL);
}
ElementType DeleteQ(Queue Q){
Position FrontCell;
ElementType FrontElem;
if(IsemptyQ(Q)){
printf("Queue is empty");
return ERROR;
}else{
FrontCell = Q->Front;
if(Q->Front==Q->Rear)
Q->Front = Q->Rear = NULL;
else
Q->Front = Q->Front->Next;
FrontElem = FrontCell->Data;
free(FrontCell);
return FrontElem;
}
}
void AddQ(Queue Q,ElementType item){
Position FrontCell;
ElementType FrontElem;
PtrToNode s = malloc(sizeof(struct Node));
s->Data = item;
s->Next =NULL;
if(IsemptyQ(Q))
Q->Front = Q->Rear = s;
else{
Q->Rear->Next = s;
Q->Rear = s;
}
return ;
}
int main()
{
Queue Q = CreateQueue(5);
int empty = IsemptyQ(Q);
if(empty)
{
printf("Queue is empty!\n");
}else
printf("Queue is not empty!\n");
AddQ(Q,1);
AddQ(Q,2);
AddQ(Q,3);
AddQ(Q,4);
int m = DeleteQ(Q);
printf("%d\n",m);
empty = IsemptyQ(Q);
if(empty)
{
printf("Queue is empty!\n");
}else
printf("Queue is not empty!\n");
return 0;
}