博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本数据结构(C)
阅读量:5846 次
发布时间:2019-06-18

本文共 3101 字,大约阅读时间需要 10 分钟。

栈:

#include "stdio.h"#include "stdlib.h"#define MAX_SIZE 100typedef struct stack{    int *base;    int top;}Stack;int InitStack(Stack *stack){    stack->base=(int *)malloc(MAX_SIZE*sizeof(int));    if(!stack->base) return -1;    stack->top=0;    return 1;}int IsEmpty(Stack *stack){    if(0==stack->top) return 1;    return 0;}int IsFull(Stack *stack){    if(MAX_SIZE-1==stack->top) return 1;    return 0;}int Push(Stack *stack,int e){    if(!IsFull(stack))    {        stack->base[stack->top]=e;stack->top+=1;        return 1;    }    return -1;}int Pop(Stack *stack){    if(!IsEmpty(stack))    {        stack->top-=1;        return stack->base[stack->top];    }    return -1;}void main(){    int i=1;    Stack *stack=(Stack *)malloc(sizeof(Stack));    if(InitStack(stack))    {        while(i<=10)        {            Push(stack,i);            i++;        }    }    printf("栈中元素出栈(先进后出):\n");    while(!IsEmpty(stack))    printf("%d\t",Pop(stack));}

队列:

#include "stdio.h"#include "stdlib.h"#define MAX_SIZE 10//虽然容量是10,但注意该循环队列只能保存9个整数typedef struct queue{    int *base;    int rear;    int front;}SqQueue;//初始化循环队列int InitQueue(SqQueue *sqqueue){   sqqueue->base=(int *)malloc(MAX_SIZE*sizeof(int));   if(!sqqueue->base)return -1;   sqqueue->rear=0;   sqqueue->front=0;   return 1;}//入队int EnQueue(SqQueue *sqqueue,int e){    if((sqqueue->rear+1)%MAX_SIZE==sqqueue->front)return -1;    sqqueue->base[sqqueue->rear]=e;    sqqueue->rear=(sqqueue->rear+1)%MAX_SIZE;    return 1;}//获取对头元素int FrontQueue(SqQueue *sqqueue){    if(Empty(sqqueue))return -1;    return sqqueue->base[sqqueue->front];}//出队int DeQueue(SqQueue *sqqueue){    int i=0;    if(sqqueue->rear==sqqueue->front)return -1;    i=FrontQueue(sqqueue);    sqqueue->front=(sqqueue->front+1)%MAX_SIZE;    return i;}//判断队列是否为空。注意空和满的条件int Empty(SqQueue *sqqueue){     if(sqqueue->rear==sqqueue->front)        return 1;     else        return 0;}void main(){    int i=1;    SqQueue *sqqueue=(SqQueue *)malloc(sizeof(SqQueue));    if(InitQueue(sqqueue))    {        while(i<=10)//最后一次入队失败。因为要损失一个空间存放尾指针        {             EnQueue(sqqueue,i);             i++;        }    }    printf("打印队列元素\n");    while(!Empty(sqqueue))        printf("%d\n",DeQueue(sqqueue));}

败者树:

#include "stdio.h"#define K 8#define MINKEY -1//比所有关键字都小的一个值#define MAXKEY 1000//比所有关键字都大的一个值int b[K];void Adjust(int ls[K],int s)//败者树存储在ls[1]~ls[K-1]中,s为记录所在的归并段号{    int t,temp;    t=(s+K)/2;//t为b[s]的父节点所在败者树中的下标,K是归并段数    while(t>0)//没有到达树根则继续    {        if(b[s]>b[ls[t]]){
//与父节点指示的数据进行比较 temp=s;s=ls[t];//指示胜者,胜者将去参加更上一层比较 ls[t]=temp;//ls[t]记录败者所在的段号 } t=t/2;//向树根回退一层 } ls[0]=s;//ls[0]记录本趟最小关键字所在的短号}int Get_next(int i){}void K_merger(int ls[K])/*ls[0]~ls[K-1]是败者树的内部节点。b[0]~b[K-1]分别存储K个初始归并段的当前记录*//*函数Get_next(i)从第i个归并段读取并返回当前记录,若归并段为空,则返回MAXKEY*/{ int b[K+1],i,q; for(i=0;i
=0;--i)//依次从b[K-1],b[K-1]..b[0]出发调整败者树。 Adjust(ls,i); while(b[ls[0]]!=MAXKEY)//ls[0]记录本趟最小关键字所在的段号 { q=ls[0];//q是当前最小关键字的所在的归并段。 printf("%d",b[q]); b[q]=Get_next(q); Adjust(ls,q); }}

 

转载地址:http://iuwjx.baihongyu.com/

你可能感兴趣的文章
项目管理修炼之道之规划项目
查看>>
学生机房PC也桌面虚拟化!
查看>>
Ext.Net 1.2.0_分析 Ext.Net.ResourceHandler 资源处理程序
查看>>
dedecms的arclist循环中判断第一个li添加css,否则不加
查看>>
java—三大框架详解,其发展过程及掌握的Java技术慨括
查看>>
Git 常用命令
查看>>
HDU 2289 Cup (二分)
查看>>
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
查看>>
[翻译] 使用CSS进行文字旋转
查看>>
读取本地已有的.db数据库
查看>>
C#发现之旅第十一讲 使用反射和特性构造自己的ORM框架
查看>>
使用GHOST对Windows操作系统进行备份和还原
查看>>
KMeans (K均值)算法讲解及实现
查看>>
为什么不应该使用Zookeeper做服务发现?(转载)
查看>>
《JavaScript核心概念及实践》——2.2 变量
查看>>
git 常用命令
查看>>
关于java 1.8的Lambda表达式详解
查看>>
缅怀那些正渐行渐远的编程语言
查看>>
各个网站的CSS清除代码
查看>>
TableView的集合
查看>>