请C语言高手帮我编写几个数据结构的小程序~(一定要用C++编写噢~)谢啦~

题目11:按照下列要求建立单链表,编写程序实现
(1)按照尾插入法建立不带头结点的单链表,并输出此单链表。
(2)按照尾插入法建立一个带头结点的单链表,并输出此单链表。
题目12:假设L为带头结点的单链表,表中元素值递增有序,编写程序删除表中值相同的多余元素。
题目13:编写程序,实现循环队列上的下列操作,
(1)判断队列是否为空;
(2)取对头元素;
(3)队尾插入元素;
(4)队头删除元素
最新回答
你刚好出现

2024-11-05 08:32:38

#include"stdio.h"
#include"malloc.h"
#define MaxSize 10
typedef char ElemType ;
typedef struct
{
ElemType data[MaxSize]; int front,rear;
}SqQueue;

void InitQueue(SqQueue *&q) //初始化队列
{
q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}

void ClearQueue(SqQueue *&q) //销毁队列
{ free(q); }

int QueueEmpty(SqQueue *q) //判断队列是否为空
{ return(q->front==q->rear); }

int enQueue(SqQueue *&q,ElemType e) //入队列
{
if((q->rear+1)%MaxSize==q->front) return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e; return 1;
}

int deQueue(SqQueue *&q,ElemType &e) //出队列
{
if(q->front==q->rear) return 0;
q->front=(q->front+1)%MaxSize;
e=q->data[q->front]; return 1;
}

void numQueue(SqQueue *q) //输出队列元素个数
{
if(q->rear>=q->front)
printf("这个队列的元素个数为:%d\n",q->rear-q->front);
else
printf("这个队列的元素个数为:%d\n",MaxSize-q->front+q->rear);
}

void DispQueue(SqQueue *q) //输出队列
{
int i=0,f=q->front+1;
while((f+MaxSize)%MaxSize!=q->rear)
{
printf("%c\t",q->data[f]);
f++; i++;
if(i%5==0)printf("\n");
}
printf("%c\n",q->data[f]);

}

void main()
{
SqQueue *q;
ElemType e;
InitQueue(q);
if(QueueEmpty(q))printf("这个队列是空的!\n");
else printf("这个队列不是空的!\n");
enQueue(q,'a'); enQueue(q,'b'); enQueue(q,'c');
if(deQueue(q,e)==1)
printf("出对元素为:%c\n此时",e);
numQueue(q);
enQueue(q,'d'); enQueue(q,'e'); enQueue(q,'f');
printf("def进队列后,");
numQueue(q);
printf("它的元素有:\n");
DispQueue(q);
ClearQueue(q);
}

这是我以前的作业,你自己组织下,应该可以解决你的问题