C 语言 顺序表 及功能函数
来源:互联网 发布:华师大二附中 知乎 编辑:程序博客网 时间:2024/05/17 22:43
头文件 seqlist.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include< stdio.h>
#include< assert.h>
#include< string.h>
#include< stdlib.h>
typedef int DataType;
#define DEFAULT_SZ 3
#define INT_SZ 2
typedef struct SeqList
{
DataType * pdata;
int sz;
int capacity;
}SeqList,*pSeqList;
void InitSeqList(pSeqList plist);//初始化
void CheckSeqList(pSeqList plist);//增容
int Find(pSeqList plist,DataType d);
void PushBack(pSeqList plist,DataType d);//后插
void PopBack(pSeqList plist);//后拿
void PushFront(pSeqList plist,DataType d);//前拿
void PopFront(pSeqList plist);//前拿
void Remove(pSeqList plist,DataType d);//移走一个数
void RemoveAll(pSeqList plist,DataType d);//移走所有这个数
void BobbleSort(pSeqList plist);//冒泡排序
int binarySearch(pSeqList plist,DataType d);//二分查找
void PrintfSeqList(pSeqList pLlist);//输出顺序表
void Insert(pSeqList plist,int pos,DataType d);//插入
void Reverse(pSeqList plist);//逆序
void DestorySeqList(pSeqList plist);//销毁 动态内存
#endif //SEQLIST_H
seqlist.c 文件
#include”SeqList.h”
pSeqList list;
void InitSeqList(pSeqList plist)
{
assert(plist);
plist->sz=0;
plist->pdata=(pSeqList)malloc(sizeof(DataType)*DEFAULT_SZ);
if(plist->pdata==NULL)
{
perror(“out of memory”);
return ;
}
plist->capacity=DEFAULT_SZ;
memset(plist->pdata,0,sizeof(DataType)*DEFAULT_SZ);
}//初始化
void CheckSeqList(pSeqList plist)
{
pSeqList tmp=NULL;
if(plist->sz==plist->capacity)
{
tmp=(pSeqList)realloc(plist->capacity,sizeof(DataType)*INT_SZ);
if(tmp!=NULL)
{
plist->pdata=tmp;
plist->capacity+=INT_SZ;
}
}
}//增容
void PrintfSeqList(pSeqList plist)//输出顺序表
{int i=0;
assert(plist);
for(i=0;i<plist->sz;i++){ printf("%d ",plist->pdata[i]);}printf("\n");
}
void PushBack(pSeqList plist,DataType d)
{
assert(plist);
CheckSeqList(&list);
plist->pdata[plist->sz]=d;
plist->sz++;
printf(“写入成功!”);
}
void PopBack(pSeqList plist)
{
assert(plist);
plist->sz–;
printf(“删除成功!”);
}
void PushFront(pSeqList plist,DataType d)
{
int i=0;assert(plist);for(i=plist->sz;i>=1;i--){ plist->pdata[i]=plist->pdata[i-1];}plist->pdata[0]=d;plist->sz++;printf("添加成功!");
}
void PopFront(pSeqList plist)//前拿
{
int i=0;assert(plist);for(i=1;i<=plist->sz-1;i++){ plist->pdata[i-1]=plist->pdata[i];}plist->sz--;printf("移除成功!");
}
void Remove(pSeqList plist,DataType d)
{
int tmp=0;
int i=0;
assert(plist);
tmp=Find(&list,d);
for(i=tmp;i<plist->sz;i++){ plist->pdata[i]=plist->pdata[i+1];}plist->sz--;printf("移除成功!");
}
int Find(pSeqList plist,DataType d)
{
int i;
assert(plist);
for(i=0;isz;i++)
{ if(plist->pdata[i]==d) { return i; }}return -1;
}
void RemoveAll(pSeqList plist,DataType d)
{
int tmp=0;
int i=0;
assert(plist);
while((tmp=Find(&list,d))==d)
{
for(i=tmp;isz;i++)
{
plist->pdata[i]=plist->pdata[i+1];
}
plist->sz–;
printf(“移除成功!”);
}
}
void BobbleSort(pSeqList plist)
{
int i=0;
int j=0;
DataType tmp=0;
assert(plist);
for(i=0;isz-1;i++)
{
for(j=0;jsz-1-i;j++)
{
if(plist->pdata[j]>plist->pdata[j+1])
{
tmp=plist->pdata[j];
plist->pdata[j]=plist->pdata[j+1];
plist->pdata[j+1]=tmp;
}
}
}
printf(“排序成功!”);
}
void Insert(pSeqList plist,int pos,DataType d)
{
int i=0;
for(i=plist->sz;i>pos;i–)
{
plist->pdata[i+1]=plist->pdata[i];
}
plist->pdata[pos]=d;
}
void Reverse(pSeqList plist)
{
int left=0;int right=plist->sz-1;int tmp;assert(plist);while(left<right){ tmp=plist->pdata[left];
plist->pdata[left]=plist->pdata[right];
plist->pdata[right]=tmp;
}
printf(“逆序成功!”);
}
void DestorySeqList(pSeqList plist)
{
assert(plist);
free(plist);
plist=NULL;
}
test.c测试文件
#include”SeqList.h”
void menu()
{
printf(“\n”);
printf(“#######################################\n”);
printf(“######## 1.Pushback ########\n”);
printf(“######## 2.PopBack ########\n”);
printf(“######## 3.PushFront ########\n”);
printf(“######## 4.PopFront ########\n”);
printf(“######## 5.Remove ########\n”);
printf(“######## 6.RemoveAll ########\n”);
printf(“######## 7.BobbleSort ########\n”);
printf(“######## 8.binarySearch ########\n”);
printf(“######## 9.PrintfSeqList ########\n”);
printf(“######## 10.Insert ########\n”);
printf(“######## 11.Reverse ########\n”);
printf(“######## 0.exit ########\n”);
printf(“#######################################\n”);
}
void test()
{
DataType d;
int input;
int pos;
pSeqList list;
InitSeqList(&list);
do
{
menu();
printf(“请选择>: “);
scanf(“%d”,&input);
switch(input)
{
case 1:
printf(“\n请输入数字:”);
scanf(“%d”,&d);
PushBack(&list,d);
break;
case 2:
PopBack(&list);
break;
case 3:
printf(“\n请输入数字:”);
scanf(“%d”,&d);
PushFront(&list,d);
break;
case 4:
PopFront(&list);
break;
case 5:
printf(“\n请输入数字:”);
scanf(“%d”,&d);
Remove(&list,d);
break;
case 6:
printf(“\n请输入数字:”);
scanf(“%d”,&d);
RemoveAll(&list,d);
break;
case 7:
BobbleSort(&list);
break;
case 8:
printf(“\n请输入数字:”);
scanf(“%d”,&d);
binarySearch(&list,d);
break;
case 9:
PrintfSeqList(&list);
break;
case 10:
printf(“\n请输入pos:”);
scanf(“%d”,&pos);
printf(“\n请输入数字d:”);
scanf(“%d”,&d);
Insert(&list,pos,d);
break;
case 11:
Reverse(&list);
break;
case 0:
break;
default :
printf(“输入错误!”);
break;
}
}while(input);
DestorySeqList(&list);
}
int main()
{
test();
return 0;
}
- C 语言 顺序表 及功能函数
- c语言数据结构之顺序表静态链表的创建及功能函数
- c语言数据结构之顺序表单链表的创建及功能函数
- c语言数据结构之顺序表单循环链表的创建及功能函数
- C语言中time函数功能及用法
- C语言中localtime函数功能及用法
- C语言中mktime函数功能及用法
- C语言中ctime函数功能及用法
- C语言中串拷贝函数strcpy功能及用法
- C语言中strstr函数功能及用法
- C语言中strlen函数功能及用法
- C语言中atof函数功能及用法
- C语言中memcopy函数功能及用法
- C语言中mktime函数功能及用法
- C语言中mktime函数功能及用法
- C语言::printf()函数功能、原型、用法及实例
- C语言中mktime函数功能及用法
- C语言 用顺序表实现电话本的功能
- 九度OJ-1456:胜利大逃亡
- JVMMemory
- Android studio 之 打包 model 成 jar (xutils 数据库升级版本校验问题)
- 第七章 注解式控制器的数据验证、类型转换及格式化--SpringMVC数据验证
- 别名机制
- C 语言 顺序表 及功能函数
- 统计和(树状数组)
- 初入 java 注解(一)
- C
- 程序员内心成长之路
- 论文阅读 R-FCN: Object Detection via Region-based Fully Convolutional Networks
- 项目中Android Studio报错集锦
- java的equals和hashcode方法的区别和联系
- PAT甲级练习1037. Magic Coupon (25)