算法:先生成随机数,赋值到数组,将数组第一个元素a[0]设置为哨兵,函数调用数组和随机数个数n,再设定n/2的根结点与孩子结点进行比较操作,若右孩子存在,则选出三个数里最小的数赋值给根节点,如果右孩子不存在,则只需比较左孩子与根节点大小,一直循环操作至a[1],再从a[2]开始进行根结点与孩子结点进行比较操作,一直到n/2为止,最后,依次输出a[1],输出后将a[n]赋值给a[1];再进行递归操作,重复以上步骤,直至数组为空要点...
代码如下:#include<stdio.h>
#include<stdlib.h>typedef char ElemType;
#define MAXQUEUE 100typedef struct
{ElemType *base;int front;int rear;
}cycleQueue;/////////////////////////////////
//创建一个循环队列
void initqueue(cycleQueue *q)
{q->base = (ElemType*)malloc(sizeof(cycleQueue) * MAXQUEUE);//为循环队列申请连续空间if (!q->base){exit(0);}q->front = q->rear = 0;//初始换队首队尾位置为0
}//////////...
//单链表基本操作 1 #include <stdio.h>2 3 #include <stdlib.h>4 5 6 typedef struct _NODE7{8int data;9struct _NODE *pNext;10 }NODE,*PNODE;11 12 PNODE Create_List(void)13{14int len = 0;15int data,i = 0;16 PNODE pHead = NULL;17 pHead = (PNODE)malloc(sizeof(NODE));18 PNODE pTail = pHead;19 pTail->pNext = NULL;20 21if(pHead == NULL)22 {23 printf("内存分配失败!\r\n");24 }...
数据结构线性表链表的C语言实现 说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构。它可以分为顺序表和链表。它的主要操作是数据元素的插入,删除,以及排序等。接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给予可运行的程序源代码。 线性表链表不同于顺序表,它是一种链式的线性表,和顺序表...
所谓共享栈是两个栈在一个顺序的存储空间中。两个栈的栈底分别是存储空间的首尾地址。如图我们可以将两个栈构造成一个:如图:从这里也就可以分析出来,栈1为空时,就是top1等于-1时;而当top2等于n时,即是栈2为空时,那么什么时候栈满呢? 想想极端的情况,若栈2是空栈,栈1的top1等于n-1时,就是栈1满了。反之,当栈1为空栈时,top2等于0时,为栈2满。但更多的情况,其实就是刚才说的,两个栈见面之时,也就是两个指针之间相...
1、栈的基本概念栈的定义:栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除的一端称为栈顶(top)。栈顶是由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是数组索引,对于链式栈,就是节点地址的指针)来指示。栈的插入和删除操作一般称为入栈和出栈。栈的特点:先进后出(FILO)。2、栈的本质栈依照存储结构可分为顺序栈和链式栈。由栈的定义可知,栈是一种在操作上稍加限制的线性表,...
#include<stdio.h>
//快速排序
void quickSort(int a[],int left,int right)
{int i,j,temp;i = left;j = right;temp = a[left];if(left>right)return;while(i!=j){while(a[j]>=temp &&j>i)j--;if(j>i)a[i++] = a[j];while(a[i]<=temp&&j>i)i++;if(j>i)a[j--] = a[i];}a[i] = temp;quickSort(a,left,i-1);quickSort(a,i+1,right);
}
//冒泡排序
void bubbleSort(int a[],int len)
{int i,j,temp;for(i = 0;i<len;i++){ for(j = 0...
约瑟夫环问题(C语言、数据结构版)一、问题描述N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推。最后留下的人获胜。(有很多类似问题,如猴子选代王等等,解法都一样)二、思路分析 (1)可将人的顺序简单编号,从1到N; (2)构造一个循环链表,可以解决首位相连的问题,同时如果将人的编号改为人名或者其他比较方便 (3)将人的编号插入到结构体的Data域;...
StaticLinkLinst.h#ifndef STATIC_LINKLIST_H
#define STATIC_LINKLIST_Htypedef void StaticLinkListNode; //静态单链表节点
typedef void StaticLinkList; //静态单链表/*
* 创建静态单链表
* @param capacity 静态单链表的最大容量
* @return 返回静态单链表的指针
*/
StaticLinkList* StaticLinkList_Create(int capacity);/*
* 销毁静态单链表
* @param list 静态单链表的指针
*/
void StaticLinkList_Destr...
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下://SIZE用于多个场合,如栈的大小、表达式数组的大小#define SIZE 1000//表达式的单个元素所使用的结构体
typedef struct elem {int num = 0; //若元素存储操作数则num为该操作数char oper = ‘=‘; //若元素存储操作符则oper为该操作符bool IsNum = false; //用于判断元素是否为操作...
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>typedef
struct Arr {int *pBase; //数组第一个元素地址int len; //数组长度int cnt; //当前有效元素数量} Array;void init_array(Array *, int); //初始化数组void show_array(Array *); //遍历打印数组bool is_empty(Array *); //判断数组是否空bool insert_array(Array *, int pos, int); //插入元素 pos表示在第几个元素前面插入bool append_array(Array *...
中序遍历二叉排序树输入一整数序列,建立二叉排序树,然后中序遍历。输入第一行为整数的个数n,第二行是具体的n个整数。建立二叉排序树,然后输出中序遍历的结果。输入示例:5
1 6 5 9 8输出:1 5 6 8 9 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu{int data;struct stu *lc,*rc;
}bitree;
bitree *creat(int n){int ch;bitree *q[100];//设置指针型数组构建队列 int front,rear;int num=0,i;b...
1. 头结点表示链表中第一个结点的存储位置2. 最后一个结点的存储位置为空(NULL);#ifndef __LINKLLIST_H__
#define __LINKLLIST_H__#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLF -1
#define OVERFLOW -2#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10typedef int Status;typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;
}LNode, *LinkList;#endif
#inclu...
//广义表的头尾链表存储表示
//杨鑫
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTRLEN 40 )
typedef char SString[MAXSTRLEN+1];
typedef char AtomType; // 定义原子类型为字符型
typedef enum{ATOM, LIST // ATOM==0:原子 LIST==1:子表
} ElemTag; typedef struct GLNode
{ElemTag tag; // 公共部...
//链式队列的存储
//杨鑫
#include <stdio.h>
#include <stdlib.h>
typedef int QElemType;//定义节点
typedef struct QNode
{QElemType data;struct QNode *next;
}QNode, *QueuePtr;//定义指针
typedef struct
{QueuePtr front;QueuePtr rear;
}LinkQueue;//插入元素e进入队列
void en_Queue(LinkQueue *q, QElemType e)
{QueuePtr temp = (QueuePtr)malloc(sizeof(QNode));if(temp){temp->data = e;temp->next = NULL;q->rear->...