zoukankan      html  css  js  c++  java
  • C语言小算法_2_静态队列操作

    /*
    本程序测试线性队列的数据结构
    */

    #include <stdio.h>

    #define MAXSIZE 1024

    typedef struct node
    {
    int data[MAXSIZE];
    int length;
    } SeqList;


    /*
    函数功能:
    初始化线性队列
    函数原型:
    void SeqListInit(SeqList *pSeqList,int n)
    函数参数:
    SeqList *pSeqList: 待初始化队列首指针
    int n:数据元素的个数
    异常:
    传递空指针,
    数据元素的个数大于 MAXSIZE
    */
    void SeqListInit(SeqList *pSeqList,int n)
    {
    int i;

    if(NULL==pSeqList || n > MAXSIZE || n<0 )
    {
    printf("Error\n");
    return ;
    }

    for(i=0;i<n;++i)
    {
    printf("Please input the %d th elements:",i);
    scanf("%d",&pSeqList->data[i]);
    }
    pSeqList->length=n;
    }

    /*
    函数功能:
    打印线性队列
    函数原型:
    void SeqListPrint(SeqList *pSeqList)
    函数参数:
    SeqList *pSeqList: 线性队列的地址
    异常:
    传递空指针
    */
    void SeqListPrint(SeqList *pSeqList)
    {
    int i;

    if(pSeqList == NULL )
    {
    printf("Error\n");
    return ;
    }


    i=0;
    while(i < pSeqList->length )
    {
    printf("%-6d",(*pSeqList).data[i]);
    if( ++i % 5 == 0 )
    putc('\n',stdout);
    }

    putchar('\n');
    }

    /*
    函数功能:
    在队列的第n个位置插入一个新的元素
    函数原型:
    void SeqListInsert(SeqList *pSeqList,int n,int element)
    函数参数:
    SeqList *pSeqList:队列的地址
    int n: 要插入数据的位置
    int element:要插入的数据
    异常:
    传递空指针
    插入位置小于 0 或者大于 MAXSIZE
    */
    void SeqListInsert(SeqList *pSeqList,int n,int element)
    {
    int i;

    if(n < 0 || n > MAXSIZE || pSeqList == NULL )
    {
    puts("Error\n");
    return ;
    }

    i= pSeqList->length;
    while(i>=n) //若条件为 i> n 时将新数据插入到 n 后面
    {
    pSeqList->data[i]=pSeqList->data[i-1];
    --i;
    }
    pSeqList->data[i]=element;

    ++pSeqList->length;
    }

    /*
    函数功能:
    删除队列中指定位置的元素
    函数原型:
    void SeqListDel(SeqList *pSeqList,int n)
    函数参数:
    SeqList *pSeqList: 待删除元素队列的地址
    int n:要删除的元素的位置
    异常:
    传递空指针
    n 小于 0 或 n 大于队列中数据元素的长度,或者 n 大于 MAXSIZE
    */
    void SeqListDel(SeqList *pSeqList, int n)
    {
    int i;

    if(n<0 || n>(*pSeqList).length || pSeqList==NULL)
    {
    puts("Error\n");
    return ;
    }

    i=n;
    while(i < (*pSeqList).length )
    {
    pSeqList->data[i-1]=pSeqList->data[i];
    ++i;
    }
    pSeqList->data[i]=0;
    --(*pSeqList).length;

    }

    /*
    函数功能:
    查找队列中是否存在某个元素,若存在则返回元素的位置
    函数原型:
    unsigned int SeqListSearch(SeqList *pSeqList,int element)
    函数参数:
    SeqList *pSeqList: 待查找元素所在队列的地址
    int element:待查找的元素
    异常:
    传递空指针
    */
    void SeqListSearch(SeqList *pSeqList,int element,int *ele_pos)
    {
    int i;

    if(NULL==pSeqList)
    {
    puts("Error:Empty Pointer\n");
    return ;
    }

    for(i=0;i< pSeqList->length;++i)
    if(pSeqList->data[i]==element)
             {
    *ele_pos=++i;
              return ;
              }

    *ele_pos=0;
    }

    /*
    函数功能:
    将队列的数据按照升序排列
    函数原型:
    void SeqListSort(SeqList *pSeqList)
    函数参数:
    SeqList *pSeqList:待排序队列地址
    异常:
    传递空指针
    Tip:
    采用冒泡法排序
    */
    void SeqListSort(SeqList *pSeqList)
    {
    int i,
    j,
    i_varTemp;

    if(NULL==pSeqList)
    {
    puts("Error:Empty Pointer\n");
    return ;
    }

    for(i=0;i<pSeqList->length;++i)
    for(j=0;j < pSeqList->length - i - 1;++j)
    {
    if(pSeqList->data[j]>=pSeqList->data[j+1])
    {
    i_varTemp=pSeqList->data[j];
    pSeqList->data[j]=pSeqList->data[j+1];
    pSeqList->data[j+1]=i_varTemp;
    }
    }

    }


    int main(int argc,char *argv[])
    {
    int seq_len;
    int insert_element;
    int element_pos;
    SeqList SeqListTest;

    printf("Please enter the length of the seq: n < 1024");
    scanf("%d",&seq_len);

    SeqListInit(&SeqListTest,seq_len);
    SeqListPrint(&SeqListTest);

    puts("Enter the element you wanna insert to the seq:");
    scanf("%d",&insert_element);
    SeqListInsert(&SeqListTest,4,insert_element);
    puts("After insert:\n");
    SeqListPrint(&SeqListTest);

    SeqListDel(&SeqListTest,1);
    puts("After delete element");
    SeqListPrint(&SeqListTest);

    SeqListSearch(&SeqListTest,3,&element_pos);
    if(0 != element_pos)
    printf("The position of 3 in the seq is:%d\n",element_pos);
    else
    puts("No such element in the seq\n");

    SeqListSort(&SeqListTest);
    SeqListPrint(&SeqListTest);

    return 0;
    }
  • 相关阅读:
    文艺青年、普通青年、2b青年到底是什么意思?
    CMake快速入门教程:实战
    shell脚本中变量$$、$0等的含义
    工作上的C/C++相关
    C/C++的一些备忘
    shell基础二十篇 一些笔记
    C++中this指针的用法详解
    【C++11】新特性——auto的使用
    一个很不错的bash脚本编写教程
    容器
  • 原文地址:https://www.cnblogs.com/volcanol/p/2346759.html
Copyright © 2011-2022 走看看