【C语言】实现静态顺序表

来源:互联网 发布:陶晶锅涂层有毒吗 知乎 编辑:程序博客网 时间:2024/04/30 13:44
text.h#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define MAX_SIZE 10typedef int DataType;typedef struct Seqlist{DataType array[MAX_SIZE];            //存储数据的数组size_t size;                         //存储数据的个数     }SeqList;void Init(SeqList *seq);//初始化顺序表        void Destory(SeqList *seq);//销毁顺序表void Print(SeqList *seq);//打印顺序表void PushBack(SeqList *seq, DataType x);//尾部插入数字void PopBack(SeqList *seq, DataType x);//尾部删除数字void PushFront(SeqList *seq, DataType x);//头部插入数字void PopFront(SeqList *seq, DataType x);//头部删除数字void Insert(SeqList *seq, size_t pos,DataType x);//void Remove(SeqList *seq, DataType x);void Erase(SeqList *seq, DataType x);int find(SeqList *seq, DataType x);void Removeall(SeqList *seq, DataType x);void BubblesSort(SeqList *seq);//冒泡排序void SelectSort(SeqList *seq);//选择排序void InsertSort(SeqList *seq);//插入排序text.c#include"text.h"void Init(SeqList *seq)//初始化顺序表{assert(seq);memset(seq->array, 0, sizeof(DataType)*MAX_SIZE);seq->size = 0;}void Destory(SeqList *seq)//销毁顺序表{assert(seq);memset(seq->array, 0, sizeof(DataType)*MAX_SIZE);seq->size = 0;}void Print(SeqList *seq)//打印顺序表{for (size_t i = 0; i < seq->size; i++){printf("%d  ", seq->array[i]);}printf("\n");}void PushBack(SeqList *seq, DataType x)//尾部插入数字{assert(seq);if (seq->size >= MAX_SIZE){printf("list is full!\n");return;}else{seq->array[seq->size] = x;seq->size++;}}void PopBack(SeqList *seq, DataType x)//尾部删除数字{assert(seq);if (seq->size == 0){printf("list is empty!\n");return;}else{seq->size--;}}void PushFront(SeqList *seq, DataType x)//头部插入数字{assert(seq);if (seq->size+1 >= MAX_SIZE)//数组的下标是从0开始的{printf("list is full!\n");return;}else{seq->size++;for (int i = seq->size; i > 0; i--)//i的值从最后面开始{seq->array[i] = seq->array[i - 1];//将数组的倒数第二个数字往最后面移动,依次往前,直到数组的下标到0的时候}seq->array[0] = x;//将x的值赋值给数组的第一个}}void PopFront(SeqList *seq, DataType x)//头部删除数字{assert(seq);if (seq->size == 0){printf("list is empty!\n");return;}else{for (int i = 1; i < seq->size; i++){seq->array[i] = seq->array[i + 1];}seq->size--;}}void Insert(SeqList *seq, size_t pos, DataType x)//{assert(seq);if (seq->size >= MAX_SIZE){printf("list is full!\n");return;}if (pos<0 || pos>seq->size){printf("pos illeage input!\n");return;}else{seq->size--;for (size_t i = seq->size; i > pos; i--){seq->array[i] = seq->array[i - 1];}seq->array[pos] = x;}}void Erase(SeqList *seq, size_t pos){assert(seq);if (pos<0 || pos>seq->size){printf("illeage input\n");return;}else{for (size_t i = pos; i < seq->size; i++){seq->array[i] = seq->array[i + 1];}--seq->size;}}int find(SeqList *seq, DataType x){assert(seq);for (rsize_t i = 0; i < seq->size; i++){if (seq->array[i] == x);return i;}return -1;}void Remove(SeqList *seq, DataType x){assert(seq);if (seq->size == 0){printf("list is empty!");return;}else{int i = find(seq, x);if (x,-1){Erase(seq, i);}}}void Removeall(SeqList *seq, DataType x){assert(seq);rsize_t i = 0, j = 0;for (i = 0; i < seq->size; i++){if (seq->array[i] != x){seq->array[j] = seq->array[i];j++;}}seq->size -= i - j;}main.c#include"text.h"SeqList s;void Text1()//尾部插入和删除{printf("尾部插入:\n");Init(&s);PushBack(&s, 8);PushBack(&s, 2);Print(&s);PushBack(&s, 3);PushBack(&s, 4);Print(&s);PushBack(&s, 7);PushBack(&s, 9);Print(&s);printf("尾部删除:\n");Print(&s);PopBack(&s, 1);Print(&s);PopBack(&s, 1);Print(&s);PopBack(&s, 1);Print(&s);PopBack(&s, 1);Print(&s);PopBack(&s, 1);Print(&s);PopBack(&s, 1);Print(&s);}void Text2()//头部插入和删除{printf("头部插入:\n");PushFront(&s, 5);Print(&s);PushFront(&s, 7);Print(&s);PushFront(&s, 0);Print(&s);PushFront(&s, 1);Print(&s);PushFront(&s, 2);Print(&s);PushFront(&s, 6);Print(&s);PushFront(&s, 0);Print(&s);PushFront(&s, 5);Print(&s);PushFront(&s, 2);Print(&s);printf("头部删除:\n");Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);PopFront(&s, 1);Print(&s);}void Text3()//任意位置插入数字{printf("原数组:\n");PushBack(&s, 8);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PushBack(&s, 7);PushBack(&s, 9);Print(&s);printf("任意位置插入数字:\n");Insert(&s, 0, 3); Print(&s);Insert(&s, 1, 5);Print(&s);Insert(&s, 2, 6);Print(&s);printf("\n");}void Text4()//移动数字{printf("原数组:\n");PushBack(&s, 8);PushBack(&s, 2);PushBack(&s, 3);PushBack(&s, 4);PushBack(&s, 7);PushBack(&s, 9);Print(&s);Remove(&s, 1);Print(&s);Removeall(&s, 7);Print(&s);}int main(){Text1();Text2();Text3();Text4();system("pause");return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信qq号登陆改密码忘记了怎么办 本人微信红包赌博输了50万怎么办 4g飞享套餐话费用完了怎么办 手机丢了查话费欠了几百块怎么办 注销电信手机卡里面的余额怎么办 联通手机卡注销后里面的余额怎么办 手机卡网上销户以后剩余话费怎么办 联通新号注册微信发不了短信怎么办 韩博士装机卡在驱动恢复怎么办 xp打印后程序服务没有运行怎么办 刚注册的微信显示异常怎么办 不小心删了照片怎么办不要钱 qq邀请好友辅助验证成功后怎么办 微信申诉怎么让好友发验证码怎么办 微信申诉好友都删除了怎么办 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办 工行转错账号的钱被冻结怎么办 微信20w限额满了怎么办