问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于数据结构算法,谁能帮我用C语言写下?谢谢

发布网友 发布时间:2022-06-06 12:03

我来回答

2个回答

热心网友 时间:2022-07-10 04:15

这是链式队列的代码:

#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status;

typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */

typedef struct QNode /* 结点结构 */
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;

typedef struct /* 队列的链表结构 */
{
QueuePtr front,rear; /* 队头、队尾指针 */
}LinkQueue;

Status visit(QElemType c)
{
printf("%d ",c);
return OK;
}

/* 构造一个空队列Q */
Status InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front)
exit(OVERFLOW);
Q->front->next=NULL;
return OK;
}

/* 销毁队列Q */
Status DestroyQueue(LinkQueue *Q)
{
while(Q->front)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
return OK;
}

/* 将Q清为空队列 */
Status ClearQueue(LinkQueue *Q)
{
QueuePtr p,q;
Q->rear=Q->front;
p=Q->front->next;
Q->front->next=NULL;
while(p)
{
q=p;
p=p->next;
free(q);
}
return OK;
}

/* 若Q为空队列,则返回TRUE,否则返回FALSE */
Status QueueEmpty(LinkQueue Q)
{
if(Q.front==Q.rear)
return TRUE;
else
return FALSE;
}

/* 求队列的长度 */
int QueueLength(LinkQueue Q)
{
int i=0;
QueuePtr p;
p=Q.front;
while(Q.rear!=p)
{
i++;
p=p->next;
}
return i;
}

/* 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */
Status GetHead(LinkQueue Q,QElemType *e)
{
QueuePtr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
*e=p->data;
return OK;
}

/* 插入元素e为Q的新的队尾元素 */
Status EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr s=(QueuePtr)malloc(sizeof(QNode));
if(!s) /* 存储分配失败 */
exit(OVERFLOW);
s->data=e;
s->next=NULL;
Q->rear->next=s; /* 把拥有元素e的新结点s赋值给原队尾结点的后继,见图中① */
Q->rear=s; /* 把当前的s设置为队尾结点,rear指向s,见图中② */
return OK;
}

/* 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */
Status DeQueue(LinkQueue *Q,QElemType *e)
{
QueuePtr p;
if(Q->front==Q->rear)
return ERROR;
p=Q->front->next; /* 将欲删除的队头结点暂存给p,见图中① */
*e=p->data; /* 将欲删除的队头结点的值赋值给e */
Q->front->next=p->next;/* 将原队头结点的后继p->next赋值给头结点后继,见图中② */
if(Q->rear==p) /* 若队头就是队尾,则删除后将rear指向头结点,见图中③ */
Q->rear=Q->front;
free(p);
return OK;
}

/* 从队头到队尾依次对队列Q中每个元素输出 */
Status QueueTraverse(LinkQueue Q)
{
QueuePtr p;
p=Q.front->next;
while(p)
{
visit(p->data);
p=p->next;
}
printf("\n");
return OK;
}

int main()
{
int i;
QElemType d;
LinkQueue q;
i=InitQueue(&q);
if(i)
printf("成功地构造了一个空队列!\n");
EnQueue(&q,-5);
EnQueue(&q,5);
EnQueue(&q,10);
printf("插入3个元素(-5,5,10)后,队列的长度为%d\n",QueueLength(q));
printf("队列的元素依次为:");
QueueTraverse(q);
i=GetHead(q,&d);
if(i==OK)
printf("队头元素是:%d\n",d);
DeQueue(&q,&d);
printf("删除了队头元素%d\n",d);
i=GetHead(q,&d);
if(i==OK)
printf("新的队头元素是:%d\n",d);
ClearQueue(&q);
printf("清空队列后,q.front=%u q.rear=%u q.front->next=%u\n",q.front,q.rear,q.front->next);
DestroyQueue(&q);
printf("销毁队列后,q.front=%u q.rear=%u\n",q.front, q.rear);

return 0;
}

这是二叉树后序遍历的代码:

void PostOrder(BiTree root)
{
if(root==NULL)
return ;
PostOrder(root->lchild); //递归调用,后序遍历左子树
PostOrder(root->rchild); //递归调用,后序遍历右子树
printf("%c ", root->data); //输出数据
}
希望能帮到你,如还有不懂,可以加我的QQ:11301655

热心网友 时间:2022-07-10 04:16

Node* OutQue(Queue * qu){ //出队
Node *n=qu->front;
qu=qu->next;
n->next=NULL;
return n;
}

void InQur(Queue* qu,Node *n){ //入队
n->next=qu->rear;
qu->rear=n;
}

void PostOrder(BiTree* T){ //后序遍历二叉树
if(T!=NULL){
PostOrder(T->leftchild);
PostOrder(T->rightchild);
visit(T);//访问该节点
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王者荣耀 王者荣耀钻石有几个等级? 王者钻石一共有几个段位 奔驰E200和E200K有什么区别么? 手机怎么隐藏游戏不被发现 求教玩魔兽世界最高画质特效全开的电脑配置 2200左右配一台电脑主机(显示器不算.就单主机),高手给推荐一下配置!要... 组装台式电脑2000左右玩魔兽求推荐能玩魔兽世界的台式电脑配置主机价 ... 玩60魔兽世界电脑配置魔兽世界需要什么配置的电脑能玩得流畅 ...2200块钱的组装电脑+显示器的,要求可以玩魔兽世界,使命召唤,CF等等... ...按括号中的要求完成改写后的句子,每个空格填一个单词。(5分)小题... 急求简单的数据结构算法。已知长度n的单链式线性表L,删除多余的相同结点。 请问数据结构的3个简单算法的含义(C++) 简单数据结构算法问题 求几个数据结构的算法。。。 求数据结构算法? 数据结构算法,急求!!! 数据结构,设计简单算法,求解 数据结构图的算法 请问使用过nature's way 的妈妈们,这个益生菌粉是不是白色含有细小粉红色颗粒的 此刻我感到 五百字作文大全 纽曼斯的 Nature's Way DHA和LIfe's DHA有什么区别,哪种好? 文章我为父亲开车门的读后感500字左右 俗话"君子报仇 十年不晚"有什么典故吗? 君子报仇十年不晚类似的句子有哪些? 君子报仇,十年不晚 张仪做了什么事情,证明了君子报仇,十年不晚这句话? 君子报仇,十年不晚,到时你别后悔? “君子报仇,十年不晚”说的是什么意思? 君子报仇十年不晚是什么意思? 君子报仇十年不晚下一句是什么? 旅游景点可进行社保认证吗 兰溪医保卡使用范围 绍兴新昌刚办的社保卡为什么不能免费进景区? 社保卡可以进五台山吗? 在遂宁未满18岁可以用社保卡,进景区吗? 上海迪士尼带社保卡可以进去吗? 社保卡或驾照可以进国博吗? 可否用驾驶证或社保卡预定景区门票? 身份证忘带,用社保卡能买旅游景点门票ma? 如果考科目三没有通过不是本人原因应该怎么处理? 科目三路考,考试未通过,语音提示不安考试指令行驶10分,停车超过30 考驾照科目三考了三次都没过怎么办 人工买票可以网上退票吗? 一方没有户房屋产权证,土地证。跟另一方鉴定房屋租赁合同有效吗? 土地租赁协议算不算产权证明 无产权证只有房屋租赁合同还有效吗 有租赁合同还需要房产证吗注册公司 手机上打麻将声音卡怎么办? 3Ds max中,如何制作成这样的led效果 3dsMax/VRay效果图制作完全自学教程的内容简介