这学期学数据结构,写链队列算法,遍历函数的时候有个问题,哪位解答下~
ccAAAB逻辑 存储 存储
栈 队列 线性链表
栈顶元素 表长
两个字符串长度相等并且各个对应位置的字符都相等
有两个问题:
1.void InitList(LinkList *tail)
{
*tail=(LinkList)malloc(sizeof(LNode));
*tail->next=*tail;此句改为(*tail)->next=*tail;
}
2.void EnQueue(LinkList *tail,ElemType e)这个函数有问题,插入时没有重新形成循环链表
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
此处添加:
p->next=(*tail)->next;
(*tail)->next=p;
*tail=p;
}
3为什么需要&tail传地址,是因为函数的形参要求是指针的指针,至少为什么要求函数的形参是指针的指针,那是尾指针的地址可能会改变,这个信息无法通过指针返回,只能用
指针的指针。
同学你好:我看了你的程序:出现你截图中的原因是,在你每次将数值入队后就跳出了程序:
这是我帮你修改了 的程序,希望你能采纳:
实验结果:
#include<stdio.h>#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
QNode *next;
}*QueuePtr;
struct LinkQueue
{
QueuePtr front;
QueuePtr rear;
};
//新建一个空队列
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(OVERFLOW);
Q.front->next=NULL;
}
//插入元素(因为是队列,只能在对尾插入)到队列----入队
void AddQueue(LinkQueue &Q)
{
QueuePtr p;
int x;
printf("请输入元素的值(输入0结束):
");
scanf("%d",&x);
while(x)
{
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
exit(OVERFLOW);
p->data=x;
p->next=NULL;
Q.rear->next=p;//原来的队尾结点指向新结点
Q.rear=p;
scanf("%d",&x);
}
}
//遍历链队列
void ShowQueue(LinkQueue Q)
{
QueuePtr p;
// QElemType e;
p=Q.front->next;
// e=p->data;
while(p)
{
// printf("%d",e);
printf("%d",p->data);
printf(" ");
p=p->next;
}
printf("
");
}
//链队列对头元素出队
Status OutQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}
void main()
{
LinkQueue Lq;
QElemType x;
int menu,flag;
while(true)
{
printf("1 建立链队列(元素为整数)
");
printf("2 输入元素--入队
");
printf("3 对都元素--出队
");
printf("0 退出
");
printf("
请输入所选菜单(0-3):");
scanf("%d",&menu);
switch(menu)
{
case 1: InitQueue(Lq);
AddQueue(Lq);
ShowQueue(Lq);
case 2: AddQueue(Lq);
ShowQueue(Lq);
case 3: flag=OutQueue(Lq,x);
if(flag==0)
{
printf("队头元素出队失败!
");
printf("队列为: ");
ShowQueue(Lq);
}else
{
printf("队头元素出队成功!
");
printf("队列为: ");
ShowQueue(Lq);
}
case 0: exit(0);
}
}
}
函数ShowQueue(LinkQueue Q)中的“e=p->data;”放在while(p)前面当然不行啦,这样e只是链表的头元素,要把“e=p->data;”放到循环内,就是
void ShowQueue(LinkQueue Q)
{
QueuePtr p;
QElemType e;
p=Q.front->next;
while(p)
{
e=p->data;
printf("%d",e);
//printf("%d",p->data);
printf(" ");
p=p->next;
}
printf("\n");
}
记得插入时有个先后顺序着。
java常用的几种数据结构,堆栈,队列,数组,链
答:下面给你简单介绍:堆栈,队列,数组,链表 堆栈 采用该结构的集合,对元素的存取有如下的特点:先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。
数据结构课程设计题目(高手请进,解决后满意有分送)
答:typedef struct node { ElemType data;struct node *next;} LNode;/* 链队列结构 */ typedef struct Queue { LNode *front;LNode *rear;} Queue;Queue *InitQueue(){ Queue *temp;temp = (Queue *)malloc(sizeof(Queue));temp->front = (LNode *)malloc(sizeof(LNode));temp->rear =...
数据结构队列问题:为什么链队 要分两个结构体来定义
答:链式队列存储结构也是通过由结点构成的单链表实现的。在单链表中可以在表中的任何位置插入数据,不过在链队中,只能从末尾插入数据,从起始处删除。所以就需要一个结构来定义下一个节点的位置。你可以将单链表理解为允许松散的队伍,它是允许插队的。链队是有人管理的队伍,它有严格的要求,有一个管理者...
数据结构学的到底是什么,和算法的关系
答:上面的概念有一些模糊,我们现在来具体说一说,相信你门的数据结构使用的是一门具体的语言比如C/C++语言来说明,那是为了辅助的学习数据结构,而数据结构本身不属于任何语言(相信你把书上的程序敲到电脑里面是不能通过的吧,其只是描述了过程,要调试程序,还需要修改和增加一些东西)。你们的书上开始...
数据结构与算法大学没学明白的来
答:数据三要素 数据结构三要素分为:逻辑结构、存储结构、数据的运算。逻辑结构分为线性结构和非线性结构;存储结构分为顺序存储、链式存储、索引存储、散列存储:数据运算包括定义和实现。数据结构学习步骤 单链表(带头结点、不带头结点)设计与实现(增删改查),双链表设计与实现 栈设计与实现(数组和链表),队列...
数据结构与算法知识?
答:那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。从狭义上讲,也就是我们专栏要讲的,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等...
java多线程添加学生 用链式结构怎么写
答:个方法,用于代表队列 所包含的3个标志性方法,如下所示:(1)插入:在rear端插入元素。(2)移除:在front端删除元素。(3)访问:在front端访问元素。JDK提供的工具类非常强大,它分别代表线性表、队列、栈三种数据结构提供了两种实现:顺序结构和链式结构。虽然LinkedList工具类的功能非常强大,既可以作为...
数据结构与算法分析
答:打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、数据库管理系统、软件工程、编译原理、人工智能、图视学等都是十分有益的。2 为什么要学习数据结构 在计算机发展的初期,人们使用计算机的目的主要是处理数值计算问题。当我们使用计算机来解决一个具体问题时,一般需要经过下列...
数据结构知识:链表,队列和栈的区别
答:都是线性表 链式队列是先进先出的链表 链式堆栈是先进后出的链表
C语言与数据结构算法10套习题大全
答:```html数据结构与算法习题精选</ 一、选择题(10分)</ 栈与队列共同特性:(A)</ 链队列插入操作:(C)</ 非线性数据结构:(D)</ A[3][3]的特定元素值:692</ 树结构适合表示:(C)</ 二叉树第k层节点数:(2k-1)</ 二分查找比较序列:9, 5, 3</ 快速排序...