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;
}
原文地址:https://www.cnblogs.com/volcanol/p/2346759.html