C 语言 顺序表 及功能函数

头文件 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值