假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法
2015-05-15 22:15
1356 查看
数据结构算法题(假设以带头结点的循环链表表示队列,
并且只设一个指针指向队尾元素结点(注意不设头指针)
试编写相应的队列初始化,入队列和出队列的算法!)
并且只设一个指针指向队尾元素结点(注意不设头指针)
试编写相应的队列初始化,入队列和出队列的算法!)
/* 数据结构算法题(假设以带头结点的循环链表表示队列, * 并且只设一个指针指向队尾元素结点(注意不设头指针) * 试编写相应的队列初始化,入队列和出队列的算法!) */ #include<stdio.h> #include<stdlib.h> #include<time.h> #define OK 1 #define ERROR 0 typedef int QElemType; typedef int Status; typedef struct QNode { QElemType data; struct QNode * rear; struct QNode * next; }QNode,*LinkQueue; //链式队列的初始化 Status InitLinkQueue(LinkQueue * L) { (*L)=(LinkQueue)malloc(sizeof(QNode)); if((*L)==NULL) { printf("内存分配失败!\n"); return OK; } (*L)->rear=(*L); return OK; } //链式队列的建立 Status Create(LinkQueue * L,int n) { srand(time(0)); LinkQueue P; for(int i=0;i<n;i++) { P=(LinkQueue)malloc(sizeof(QNode)); P->data=rand()%100+1; (*L)->rear->next=P; (*L)->rear=P; } P->next=(*L); return OK; } //入队操作 Status EnQueue(LinkQueue * L,QElemType e) { LinkQueue P; P=(LinkQueue)malloc(sizeof(QNode)); P->data=e; P->next=(*L); (*L)->rear->next=P; (*L)->rear=P; return OK; } //出队操作 Status DeQueue(LinkQueue * L,QElemType * e) { LinkQueue temp; *e=(*L)->next->data; temp=(*L)->next; (*L)->next=(*L)->next->next; delete(temp); return OK; } //输出 void Print(LinkQueue * L) { LinkQueue P; P=(*L)->next; printf("输出元素:\n"); while(P!=(*L)) { printf("%d ",P->data); P=P->next; } printf("\n"); } int main() { LinkQueue L; int ElemNumber; QElemType EnElem,DeElem; InitLinkQueue(&L); printf("请输入元素个数:\n"); scanf("%d",&ElemNumber); Create(&L,ElemNumber); Print(&L); printf("请输入入队元素:\n"); scanf("%d",&EnElem); EnQueue(&L,EnElem); Print(&L); printf("出队操作,并返回出队元素:\n"); DeQueue(&L,&DeElem); printf("出队元素为:%d\n",DeElem); Print(&L); return 0; }
相关文章推荐
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- 假设在长度大于1的循环链表中,即无头结点也无头指针,s为指向链表中的某个结点的指针,试编写算法删除结点s的前驱结点
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 设以带头结点的双向循环链表表示的线性表L= (a1,a2,…,an),试写一时间复杂度O(n)的算法,将L改造为 (a1,a3,…,an,…,a4,a2)。
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
- 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 队列 - 以带头结点的循环链表表示队列(C++)
- 编写程序定义一个vector 对象,其每个元素都是指向string 类型的指针,读 取该vector 对象,输出每个string 的内容及其相应的长度。
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有元素个数为?
- 设ha和hb分别是两个带头节点的费递减有序单链表的表头指针,设计以算法,将将两个有序链表合成一个非递减的有序单链表,该程序以以前发表的博客中的链表中的区别在与该立案表带有头结点