这学期学数据结构,写链队列算法,遍历函数的时候有个问题,哪位解答下~

作者&投稿:宇封 (若有异议请与网页底部的电邮联系)
数据结构的问题,各位帮忙解答下~

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</ 快速排序...