c语言实现静态顺序表

来源:互联网 发布:淘宝雪梨的质量 编辑:程序博客网 时间:2024/05/17 21:32
seqlist.h#ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h>#include<assert.h> #include<string.h> #define MAX 10 typedef int DataType;typedef struct SeqList{DataType data[MAX];int sz;}SeqList, *pSeqList;void InitSeqList(pSeqList ps);//初始化  void PushBack(pSeqList ps, DataType d);//尾插void PopBack(pSeqList ps); // 尾删void Display(const pSeqList ps);//显示void PushFront(pSeqList ps, DataType d);//头插void PopFront(pSeqList ps);//头删int Find(pSeqList ps, DataType d);//查找元素  void Insert(pSeqList ps, DataType d, int pos);//在给定位置插入元素void Remove(pSeqList ps, DataType d);//删除指定的元素 void RemoveAll(pSeqList ps, DataType d);//删除你要删除的的出现的所有元素void Reverse(pSeqList ps);//逆序顺序表void Sort(pSeqList ps);//冒泡排序int BinarySearch(pSeqList ps, DataType d);//二分查找#endif //__SEQLIST_H__ 
seqlist.c#include"seqlist.h"void InitSeqList(pSeqList ps){assert(ps);ps->sz = 0;memset(ps->data, 0, sizeof(DataType)*(ps->sz));}void PushBack(pSeqList ps, DataType d){assert(ps);if (ps->sz < MAX){ps->data[ps->sz] = d;ps->sz++;}else{return;}}void PopBack(pSeqList ps){assert(ps);if (ps->sz == 0){return;}else{ps->sz--;}}void Display(const pSeqList ps){int i = 0;for (i = 0; i < ps->sz; i++){printf("%d", ps->data[i]);}printf("\n");}void PushFront(pSeqList ps, DataType d){assert(ps);int i = 0;for (i = ps->sz; i >0; i--){ps->data[i] = ps->data[i - 1];}ps->data[0] = d;ps->sz++;}void PopFront(pSeqList ps){assert(ps);int i = 0;if (ps->sz == 0){return;}else{for (i = 0; i < ps->sz; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;}}int Find(pSeqList ps, DataType d){assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){if (ps->data[i] == d){return i;}}return -1;}void Insert(pSeqList ps, DataType d, int pos){assert(ps);int i = 0;if (ps->sz == MAX){return;}else{memmove(ps->data + pos + 1, ps->data + pos, sizeof(DataType)*(ps->sz - pos));ps->data[pos] = d;ps->sz++;}}void Remove(pSeqList ps, DataType d){assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){if (ps->data[i] == d){for (; i < ps->sz; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;break;}}}void RemoveAll(pSeqList ps, DataType d){assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){if (ps->data[i] == d){for (; i < ps->sz; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;i = 0;}}}void Reverse(pSeqList ps){assert(ps);DataType tmp = 0;int left = 0;int right = ps->sz - 1;while (left < right){tmp = ps->data[left];ps->data[left] = ps->data[right];ps->data[right] =tmp;left++;right--;}}void Sort(pSeqList ps){DataType tmp = 0;int i = 0;int j = 0;for (i = 0; i < ps->sz - 1; i++){for (j = 0; j < ps->sz - i - 1; j++){if (ps->data[j]>ps->data[j + 1]){DataType tmp = ps->data[j];ps->data[j] = ps->data[j + 1];ps->data[j + 1] = tmp;}}}}int BinarySearch(pSeqList ps, DataType d){int left = 0;int right = ps->sz - 1;while (left < right){int mid = left + (right - left) / 2;if (ps->data[mid] < d){left=mid;}else if (ps->data[mid]>d){right=mid;}elsereturn mid;}return -1;}



test.c#include"seqlist.h"void test(){SeqList my_list;//创建结构提变量   InitSeqList(&my_list);//初始化函数  //PushBack(&my_list, 1);//插尾函数  //Display(&my_list);//PushBack(&my_list, 2);//插尾函数 //Display(&my_list);//PushBack(&my_list, 3);//插尾函数 //Display(&my_list);//PushBack(&my_list, 4);//插尾函数  //Display(&my_list);//打印数序表  //PopBack(&my_list);//删除尾部元素的信息 //Display(&my_list);//PopBack(&my_list);//Display(&my_list);//PopBack(&my_list);//Display(&my_list);//PopBack(&my_list);//Display(&my_list);//打印数序表  PushFront(&my_list, 1);//从头部插入  Display(&my_list);PushFront(&my_list, 2);Display(&my_list);PushFront(&my_list, 3);Display(&my_list);PushFront(&my_list, 2);Display(&my_list);PushFront(&my_list, 4);Display(&my_list);//PopFront(&my_list);//Display(&my_list);//PopFront(&my_list);//Display(&my_list);//PopFront(&my_list);//Display(&my_list);//PopFront(&my_list);//Display(&my_list);//int ret=Find(&my_list, 3);//printf("%d", ret);Insert(&my_list, 8, 3);//指定位置插入元素  Display(&my_list);//Remove(&my_list, 2);//删除所有你想删除的元素出现的第一个 //Display(&my_list);//RemoveAll(&my_list, 2);//删除顺序表中出现的所有你要删除的元素  //Display(&my_list);  //Reverse(&my_list);//逆序的测试  //Display(&my_list);//Sort(&my_list);//排序的测试  //Display(&my_list);//int ret = BinarySearch(&my_list, 2);//二分查找的测试  //printf("%d", ret);}int main(){test();system("pause");return 0;}


原创粉丝点击