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;

}

0 0
原创粉丝点击