/*
本程式測試線性隊列的資料結構
*/
#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:資料元素的個數
異常:
傳遞null 指標,
資料元素的個數大於 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: 線性隊列的地址
異常:
傳遞null 指標
*/
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:要插入的資料
異常:
傳遞null 指標
插入位置小於 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:要刪除的元素的位置
異常:
傳遞null 指標
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:待尋找的元素
異常:
傳遞null 指標
*/
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:待排序隊列地址
異常:
傳遞null 指標
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;
}