C語言實現順序表
標頭檔案部分:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
#define MaxSize 10
typedef struct SeqList
{
DataType array[MaxSize];
int size; // 有效資料元素的個數
}SeqList;
//列印順序表的內容
void PrintSeqList(SeqList*seq);
// 初始化順序表
void InitSeqList(SeqList* seq);
// 在順序表的尾部插入值為data的元素
void PushBack(SeqList* pSeq, DataType data);
// 刪除順序表的最後一個元素
void PopBack(SeqList* pSeq);
// 在順序表的頭部插入值為data的元素
void PushFront(SeqList* pSeq, DataType data);
// 刪除順序表頭部元素
void PopFront(SeqList* pSeq);
// 在順序表中pos位置上插入值為data的元素
void Insert(SeqList* pSeq, size_t pos, DataType data);
// 刪除順序表中pos位置上的元素
void Erase(SeqList* pSeq, size_t pos);
// 在順序表中查詢值為data的元素,找到返回該元素的位置,否則返回-1
int Find(SeqList* pSeq, DataType data);
// 刪除順序表中第一個值為data的元素
void Remove(SeqList* pSeq, DataType data);
// 刪除順序表中所有值為data的元素
void RemoveAll(SeqList* pSeq, DataType data);
// 使用氣泡排序給順序表中的元素排序
void BubbleSort(SeqList* pSeq);
// 使用選擇排序給順序表中的元素排序
void SelectSort(SeqList* pSeq);
// 使用二分查詢在順序表中查詢值為data
int BinarySearch(SeqList* pSeq, DataType data);
函式實現部分:
#include"SeqList.h"
// 列印順序表的內容
void PrintSeqList(SeqList*seq)
{
assert(seq);
int i = 0;
for (i = 0; i < seq->size; i++)
{
printf("%d ", seq->array[i]);
}
printf("\n");
}
// 初始化順序表
void InitSeqList(SeqList* seq)
{
assert(seq);
int i = 0;
for (i = 0; i < MaxSize; i++)
{
seq->array[i] = 0;
}
seq->size = 0;
}
// 在順序表的尾部插入值為data的元素
void PushBack(SeqList* pSeq, DataType data)
{
assert(pSeq);
if (pSeq->size == MaxSize)
{
return;
}
int i = pSeq->size;
pSeq->array[i] = data;
pSeq->size++;
}
// 刪除順序表的最後一個元素
void PopBack(SeqList* pSeq)
{
assert(pSeq);
if (pSeq->size == 0)
{
return;
}
pSeq->size--;
}
// 在順序表的頭部插入值為data的元素
void PushFront(SeqList* pSeq, DataType data)
{
assert(pSeq);
if (pSeq->size == MaxSize)
{
return;
}
int i = 0;
for (i = pSeq->size; i > 0; i--)
{
pSeq->array[i] = pSeq->array[i - 1];
}
pSeq->array[i] = data;
pSeq->size++;
}
// 刪除順序表頭部元素
void PopFront(SeqList* pSeq)
{
assert(pSeq);
if (pSeq->size == 0)
{
return;
}
int i = 0;
for (i = 0; i < pSeq->size; i++)
{
pSeq->array[i] = pSeq->array[i + 1];
}
pSeq->size--;
}
// 在順序表中pos位置上插入值為data的元素
void Insert(SeqList* pSeq, size_t pos, DataType data)
{
assert(pSeq);
if (pSeq->size == MaxSize||pos>pSeq->size)
{
return;
}
int i = 0;
for (i = pSeq->size; i > pos; i--)
{
pSeq->array[i] = pSeq->array[i - 1];
}
pSeq->array[i] = data;
pSeq->size++;
}
// 刪除順序表中pos位置上的元素
void Erase(SeqList* pSeq, size_t pos)
{
assert(pSeq);
if (pSeq->size == 0 || pos >= pSeq->size)
{
return;
}
int i = 0;
for (i = pos; i < pSeq->size; i++)
{
pSeq->array[i] = pSeq->array[i + 1];
}
pSeq->size--;
}
// 在順序表中查詢值為data的元素,找到返回該元素的位置,否則返回-1
int Find(SeqList* pSeq, DataType data)
{
assert(pSeq);
int i = 0;
for (i = 0; i < pSeq->size; i++)
{
if (pSeq->array[i] == data)
return i;
}
return -1;
}
// 刪除順序表中第一個值為data的元素
void Remove(SeqList* pSeq, DataType data)
{
int pos = Find(pSeq, data);
if (pos >= 0)
{
Erase(pSeq, pos);
}
else
printf("error\n");
}
// 刪除順序表中所有值為data的元素
void RemoveAll(SeqList* pSeq, DataType data)
{
assert(pSeq);
int i = 0;
int count = 0;
for (i = 0; i < pSeq->size; i++)
{
if (pSeq->array[i] == data)
count++;
else
pSeq->array[i - count] = pSeq->array[i];
}
pSeq->size -= count;
}
// 使用氣泡排序給順序表中的元素排序
void BubbleSort(SeqList* pSeq)
{
assert(pSeq);
int i = 0, j = 0,flag=0;
for (i = 0; i < pSeq->size-1; i++)
{
for (j = 0; j < pSeq->size - 1 - i; j++)
{
if (pSeq->array[j]>pSeq->array[j + 1])
{
int temp = pSeq->array[j];
pSeq->array[j] = pSeq->array[j + 1];
pSeq->array[j + 1] = temp;
flag = 1;
}
}
if (!flag)
return;
}
}
// 使用選擇排序給順序表中的元素排序
void SelectSort(SeqList* pSeq)
{
assert(pSeq);
int i = 0, j = 0;
for (i = 0; i < pSeq->size - 1; i++)
{
for (j = i + 1; j < pSeq->size; j++)
{
if (pSeq->array[i]>pSeq->array[j])
{
int temp = pSeq->array[j];
pSeq->array[j] = pSeq->array[i];
pSeq->array[i] = temp;
}
}
}
}
// 使用二分查詢在順序表中查詢值為data
int BinarySearch(SeqList* pSeq, DataType data)
{
assert(pSeq);
int left = 0;
int right = pSeq->size - 1;
int mid = left + ((right - left) >> 1);
while (left <= right)
{
if (pSeq->array[mid] == data)
{
return mid;
}
else if (pSeq->array[mid] > data)
{
right = mid - 1;
mid = left + ((right - left) >> 1);
}
else
{
left = mid + 1;
mid = left + ((right - left) >> 1);
}
}
return -1;
}
測試部分:
#include"SeqList.h"
void FunTestA()//尾插和尾刪測試函式
{
SeqList seq;
SeqList*pSeq;
pSeq = &seq;
InitSeqList(&seq);
PushBack(pSeq, 3);
PushBack(pSeq, 2);
PushBack(pSeq, 6);
PushBack(pSeq, 1);
PushBack(pSeq, 4);
PrintSeqList(&seq);
PopBack(pSeq);
PrintSeqList(&seq);
}
void FunTestB()//頭插和頭刪測試函式
{
SeqList seq;
SeqList*pSeq;
pSeq = &seq;
InitSeqList(&seq);
PushFront(pSeq, 3);
PushFront(pSeq, 2);
PushFront(pSeq, 6);
PushFront(pSeq, 1);
PushFront(pSeq, 4);
PrintSeqList(&seq);
PopFront(pSeq);
PrintSeqList(&seq);
}
void FunTestC()//任意位置插入、刪除測試函式
{
SeqList seq;
SeqList*pSeq;
pSeq = &seq;
InitSeqList(&seq);
PushFront(pSeq, 3);
PushFront(pSeq, 2);
PushFront(pSeq, 6);
PushFront(pSeq, 1);
PushFront(pSeq, 4);
PrintSeqList(&seq);
Insert(pSeq, 3, 100);
PrintSeqList(&seq);
Erase(pSeq, 3);
PrintSeqList(&seq);
}
void FunTestD()//查詢刪除、刪除全部資料,
{
SeqList seq;
SeqList*pSeq;
pSeq = &seq;
InitSeqList(&seq);
PushFront(pSeq, 3);
PushFront(pSeq, 2);
PushFront(pSeq, 6);
PushFront(pSeq, 2);
PushFront(pSeq, 1);
PushFront(pSeq, 2);
PushFront(pSeq, 4);
PrintSeqList(&seq);
printf("%d",Find(pSeq, 2));
Remove(pSeq, 2);
PrintSeqList(&seq);
RemoveAll(pSeq, 2);
PrintSeqList(&seq);
}
void FunTestE()//排序、折半查詢測試函式
{
SeqList seq;
SeqList*pSeq;
pSeq = &seq;
InitSeqList(&seq);
PushFront(pSeq, 3);
PushFront(pSeq, 2);
PushFront(pSeq, 6);
PushFront(pSeq, 2);
PushFront(pSeq, 1);
PushFront(pSeq, 2);
PushFront(pSeq, 4);
PrintSeqList(&seq);
//BubbleSort(pSeq);
SelectSort(pSeq);
PrintSeqList(&seq);
printf("%d\n",BinarySearch(pSeq, 3));
}
int main()
{
//FunTestA();
//FunTestB();
//FunTestC();
//FunTestD();
FunTestE();
system("pause");
return 0;
}
相關文章
- 線性表-順序表C語言實現C語言
- 順序表的基本方法實現C語言版C語言
- 【資料結構】實現順序表(c語言)資料結構C語言
- 資料結構c語言實現順序表基本操作資料結構C語言
- c++模擬實現順序表C++
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- C 語言運算子優先順序
- C語言運算子優先順序C語言
- Java實現順序表Java
- 順序表的實現
- 【資料結構】實現順序表(c++)資料結構C++
- 資料結構 順序棧(c語言)資料結構C語言
- DS順序表--類實現
- c語言資料結構,你可能還不知道的順序表C語言資料結構
- c語言順序棧常規插入刪除操作C語言
- 理解C語言宣告的優先順序規則C語言
- 利用順序棧完成的作業題(C語言)C語言
- 線性表的使用——順序實現
- 線性表的順序儲存C++程式碼實現C++
- 使用C#實現順序佇列C#佇列
- 順序表實現二分排序排序
- C語言常被搞錯的運算子優先順序C語言
- C語言nice()函式:改變程式優先順序C語言函式
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 順序表
- 洛谷題單入門1順序結構(C語言版)C語言
- C++ 運算子優先順序表C++
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢
- 【資料結構】順序棧的實現(c++)資料結構C++
- 掃雷--C語言實現C語言
- C語言實現DES加密C語言加密
- c語言實現階乘C語言
- 實驗二:順序表的基本操作實現及其應用
- 靜態順序表和動態順序表 對比
- 順序棧的實現方式
- 資料結構:線性表的順序實現2.2資料結構