洛阳数码大厦做网站的在几楼,wordpress 中英文双语,梧州论坛 红豆社区,网站登不上去的原因1、栈
1.1栈的概念及结构 栈时一种特殊的线性表#xff0c;只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO#xff08;Last In First Out#xff09;的原则。 1.2栈的基本实…1、栈
1.1栈的概念及结构 栈时一种特殊的线性表只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶另一端称为栈底。栈中的数据元素遵守后进先出LIFOLast In First Out的原则。 1.2栈的基本实现 栈的结构体定义 typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;栈的初始化 void STInit(ST* pst)
{assert(pst);pst-a NULL;pst-top 0; //指向栈顶元素的下一个位置pst-capacity 0;
} 栈的销毁 void STDestroy(ST* pst)
{assert(pst);free(pst-a);pst-a NULL;pst-top 0;pst-capacity 0;
} 入栈 void STPush(ST* pst, STDataType x)
{if (pst-top pst-capacity){int newcapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* tmp (STDataType*)realloc(pst-a, newcapacity * sizeof(STDataType));if (tmp NULL){perror(realloc fail);return;}pst-a tmp;pst-capacity newcapacity;}pst-a[pst-top] x;pst-top;
} 出栈 void STPop(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst-top--;
} 栈顶元素 STDataType STTop(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst-a[pst-top - 1];
} 判空 bool STEmpty(ST* pst)
{assert(pst);return pst-top 0;
} 栈的大小 int STSize(ST* pst)
{assert(pst);return pst-top;
} 2、队列
2.1队列的概念及结构 队列是只允许在一端进行插入数据操作在另一端进行删除数据操作的特殊线性表队列具有先进先出FIFO(First In First Out)的性质。 进行插入操作的一端称为队尾进行删除操作的一端称为队头。 2.2队列的基本实现 队列的结构体定义 typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;队列的基本操作 //队列初始化
void QueueInit(Queue* pq)
{assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0;
}//队列销毁
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0;
}//入队
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail\n);return;}newnode-data x;newnode-next NULL;if (pq-ptail NULL){assert(pq-phead NULL);pq-phead pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size;
}//出队
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL){//单个节点直接删除free(pq-phead);pq-phead pq-ptail NULL;}else{//多个节点相当于头删QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--;
}//队头元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq-phead-data;
}//队尾元素
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data;
}//队列长度
int QueueSize(Queue* pq)
{assert(pq);return pq-size;
}//队列判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq-phead NULL pq-ptail NULL;
}