头文件Apr 07.h
#define _CRT_SECURE_NO_WARNING 1 #pragma once #include <stdio.h> #define MAX_SIZE 10 typedef int DataType; typedef struct SeqList { DataType _array[MAX_SIZE]; int _size; //顺序表中有效元素的个数 }SeqList,*PSeqList; //typedef struct SeqList; typedef struct SeqList* PSeqList; ////////////////////////////////////////////////// //SeqList.h //顺序表的初始化 void SeqListInit(PSeqList ps); //顺序表的尾插 void SeqListPushBack(PSeqList ps,DataType data); //顺序表的尾删 void SeqListPopBack(PSeqList ps); //顺序表的头插 void SeqListPushFront(PSeqList ps,DataType data); //顺序表的头删 void SeqListPopFront(PSeqList ps,DataType data); //顺序表pos位置插入元素data void SeqListInsert(PSeqList ps,int pos, DataType data); //删除顺序表pos位置的元素 void SeqListErase(PSeqList ps,int pos); //移除顺序表中第一个值为data的元素 void Remove(PSeqList ps,DataType data); //移除顺序表中所有值为data的元素 void RemoveAll(PSeqList ps,DataType data); //在顺序表中查找所有值为data的元素,找到返回该元素 //在顺序表中的位置,否则返回-1 int SeqListFind(PSeqList ps,DataType data); ///////////////////////////////////////////////////////// //辅助操作 //打印顺序表 void PrintSeqList(PSeqList ps); //使用冒泡排序对顺序表中的元素进行排序 void BubbleSort(PSeqList ps); //使用选择排序对顺序表的元素进行排序 void SelectSort(PSeqList ps);
函数文件SeqList.c
#define _CRT_SECURE_NO_WARNING 1 #include "Apr 07.h" //在顺序表中查找所有值为data的元素,找到返回该元素 //在顺序表中的位置,否则返回-1 int SeqListFind(PSeqList ps,int data) { int i = 0; if(NULL == ps) return -1; for( ;i<ps->_size;++i) { if(data == ps->_array[i]) return i; } return -1; } void PrintSeqList(PSeqList ps) { int i = 0; if(NULL == ps) return; if(0 == ps->_size) { printf("顺序表为空!!!\n"); return; } printf("size: %d\n",ps->_size); for( ;i<ps->_size;++i) { printf("%d ",ps->_array[i]); } printf("\n"); } //结构体初始化 void SeqListInit(PSeqList ps) { if(NULL == ps) return; ps->_size = 0; } //顺序表的尾插 void SeqListPushBack(PSeqList ps,DataType data) { if(NULL == ps) return; if(MAX_SIZE == ps->_size) { printf("顺序表已满,无法插入!!!\n"); return; } ps->_array[ps->_size] = data; ++ps->_size; } //顺序表的尾删 void SeqListPopBack(PSeqList ps) { if(NULL == ps) return; if(0 == ps->_size) { printf("顺序表为空无法删除!!!\n"); return; } --ps->_size; } //顺序表的头插 void SeqListPushFront(PSeqList ps,DataType data) { int i = 0; if(NULL == ps) return; if(MAX_SIZE == ps->_size) { printf("顺序表已满无法插入!!!\n"); return; } for(i = ps->_size;i>0;--i) { ps->_array[i] = ps->_array[i-1]; } ps->_array[0] = data; ++ps->_size; } //顺序白的头删 void SeqListPopFront(PSeqList ps,DataType data) { int i = 0; if(NULL == ps) return; if(0 == ps->_size) { printf("顺序表已空无法删除!!!\n"); return; } for( ; i<ps->_size-1; ++i) { ps->_array[i] = ps->_array[i+1]; } --ps->_size; } //顺序表pos位置插入元素data void SeqListInsert(PSeqList ps,int pos, DataType data) { int i = 0; if(NULL == ps || !(pos>0 &&pos<ps->_size)) return; if(MAX_SIZE == ps->_size) { printf("顺序表已满无法插入!!!\n"); return; } for(i=ps->_size;i>pos;--i) { ps->_array[i] = ps->_array[i-1]; } ps->_array[pos] = data; ++ps->_size; } //删除顺序表pos位置的元素 void SeqListErase(PSeqList ps,int pos) { int i = 0; if(NULL == ps || !(pos>0 && pos<ps->_size)) return; if(0 == ps->_size) { printf("顺序表已空无法删除!!!\n"); return; } for(i=pos;i<ps->_size-1;++i) { ps->_array[i] = ps->_array[i+1]; } --ps->_size; } //移除顺序表中第一个值为data的元素 void Remove(PSeqList ps,DataType data) { int i = 0; int ret = 0; if(NULL == ps) return; if(0 == ps->_size) { printf("顺序表已空无法移除!!!\n"); return; } ret = SeqListFind(ps,data); i = ret; if(-1 == data) { printf("没有找到该数据\n"); return; } for( ; i<ps->_size-1;++i) { ps->_array[i] = ps->_array[i+1]; } --ps->_size; } //移除顺序表中所有值为data的元素 void RemoveAll(PSeqList ps,DataType data) { int ret = 0; int count = 0; int i = 0; if(NULL == ps) return; ret = SeqListFind(ps,data); i = ret; if(-1 == ret) { printf("未找到该数据!!!\n"); return; } for( ;i<ps->_size;++i) { if(data == ps->_array[i]) count++; else { ps->_array[i-count] = ps->_array[i]; } } ps->_size -= count; } void Swap(int *x,int *y) { int *tmp = 0; if(NULL == x || NULL == y) return; *tmp = *x; *x = *y; *y = *x; } //使用冒泡排序对顺序表中的元素进行排序 void BubbleSort(PSeqList ps) { int i = 0; int j = 0; for( ; i<ps->_size-1;++i) { for( ; j<ps->_size-1-i;++j) { if(ps->_array[j]>ps->_array[j+1]) { Swap(&ps->_array[j],&ps->_array[j+1]); } } } } //使用选择排序对顺序表的元素进行排序 void SelectSort(PSeqList ps) { int max = 0; int i = 0; int j = 0; if(NULL ==ps) return; for( ; i<ps->_size;++i) { max = 0; for( ; j<ps->_size-i;++j) { if(ps->_array[max] <ps->_array[j]) { max = j; } Swap(&ps->_array[max],&ps->_array[ps->_size-i-1]); } } }
测试问件test.c
#define _CRT_SECURE_NO_WARNING 1 #include "Apr 07.h" int main() { SeqList s; SeqListInit(&s); /*SeqListPushBack(&s,1); SeqListPushBack(&s,2); SeqListPushBack(&s,3); SeqListPushBack(&s,4); SeqListPushBack(&s,5); */ SeqListPopBack(&s); SeqListPushFront(&s,7); SeqListPushFront(&s, 5); SeqListPushFront(&s, 3); SeqListPopFront(&s,2); SeqListErase(&s, 3); SeqListErase(&s, 3); SeqListErase(&s, 3); SeqListInsert(&s, 2, 8); SeqListInsert(&s, 2, 7); SeqListInsert(&s, 2, 1); SeqListInsert(&s, 4, 1); SeqListInsert(&s, 0, 1); Remove(&s, 7); PrintSeqList(&s); RemoveAll(&s, 1); PrintSeqList(&s); return 0; }