以域变量rear和length分别指示循环队列中队尾
元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。
#include#include #define N 10 typedef struct node{ int data; struct node *rear,*front;//域变量 int lenth; struct node* next; }node,*pnode; //打印 循环链表(从头结点开始) void print_pnode(pnode a); //构建循环队列 最初数据都为0 为空 pnode create_round_queue() { node *a;//头结点不保存数据非头指针 pnode tail;//指向队尾的指针 int size = sizeof(node);//结点大小 //头结点初始化 a = (pnode)malloc(size); a->next = NULL; a->data = 0; pnode q; tail = a;//起始指向头结点 for(int i = 0;i < N;i ++) {//初始一个结点 // q = (pnode)malloc(size); q->next = NULL; q->data = 0;//0表示没有数据 //链接结点 tail->next = q; tail = q; } //tail作为队尾元素指针 tail->next = a;//然后头尾相连 形成循环链表 a->front = a->rear = a->next;//初始化头指针,尾指针指向 第一个空位,初始都为空所以指向头结点后一个位置 return a; } //入队 成功返回1,否则-1 int push(pnode a,int elem) { if(a->rear->next == a->front)//尾指针的下一个结点是头指针指向的则 说明队满(留一个空间不存储) { return -1; } else//开始入队 { a->rear->data = elem; a->lenth ++; a->rear = a->rear->next; } return 1; } //出队 不返回出队元素 出队失败返回-1 成功返回0 int pop(pnode a) { //如果尾指针 等于头指针,则为空 if(a->rear == a->front) { return -1; } //从队头出队 a->front->data = 0; a->lenth --;//队列元素 减一 a->front = a->front->next;//队头向后移 return 0;//成功返回0 } //主函数 int main() { pnode a; //构建循环队列长度为宏定义N a = create_round_queue(); //查看构建 print_pnode(a);//查看构建结果 //push push(a,3); push(a,13); push(a,-3); push(a,3); push(a,13); push(a,-3); push(a,3); push(a,13); push(a,-3); print_pnode(a); //pop pop(a); pop(a); print_pnode(a); return 0; } //打印 循环链表(从头指针开始) void print_pnode(pnode a) { pnode head = a;//从头结点开始 while(head->next != a)//如果下一个结点是头结点 说明走了一圈,结束 { printf("%d ",head->data); head = head->next;//后移 } printf("n"); return; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)