C语言实现静态顺序表

SepList.h文件

#ifndef __TEST_H__

#define __TEST_H__


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>


#define N 100








typedef int DataType;
typedef struct SepList                                                                        //定义静态结构体

DataType arrary[N];
size_t size;
}SepList;




void init_SepList(SepList* s);                                                         //初始化结构体数组
void printSepList(SepList* s);                                                        //打印结构体数组


void pushfront(SepList* s,DataType x);                                        //在头部插入数据
void popfront(SepList* s);                                                               //删除头部数据


void pushback(SepList* s, DataType x);                                      //在尾部插入数据
void popback(SepList* s);                                                              //删除尾部数据                
 
 
void insert(SepList* s, size_t pos, DataType x);                        //在指定位置插入数据
void erase(SepList* s, size_t pos);                                              //删除指定位置的数据
int Find(SepList* s, DataType x);                                                  //查找指定数据
void Remove(SepList* s, DataType x);                                       //删除指定数据
void RemoveAll(SepList* s, DataType x);                                    //删除指定的相同的所有数据




void BubbleSort(SepList* s);                                                           //使用冒泡排序排列结构体数组
void SelectSort(SepList* s);                                                             //使用选择排序排列结构体数组
int BinarySearch(SepList* s, DataType x);                                    //使用二分查找查找指定数据




#endif 




SepList.c文件

#include "test.h"




void init_SepList(SepList* s)
{
memset(s->arrary, 0, N*sizeof(DataType));
s->size = 0;
}
void pushfront(SepList* s,DataType x)
{
int i = 0;
if (s->size == N)
{
printf("通讯录已满\n");
return;
}
if (s->size == 0)
{
s->arrary[0] = x;
s -> size++;
}
else
{
for (i = s->size; i > 0; i--)
{
s->arrary[i] = s->arrary[i - 1];
}
s -> arrary[0] = x;
s->size++;
}
}
void popfront(SepList* s)
{
size_t i = 0;
if (s->size == 0)
{
return;
}
else if (s->size == 1)
{
s->size = 0;
}
else
{
for (i = 0; i < (s->size - 1); i++)
{
s->arrary[i] = s->arrary[i + 1];
}
s->arrary[s->size - 1] = 0;
s->size--;
}
}
void pushback(SepList* s, DataType x)
{
assert(s);
if (s->size == N)
{
printf("通讯录已满\n");
return;
}
else if (s->size == 1)
{
s->size = 0;
}
else
{
s->arrary[s->size] = x;
s->size++;
}
}
void popback(SepList* s)
{
assert(s);
if (s->size == 0)
{
return;
}
else
{
s->arrary[s->size - 1] = 0;
s->size--;
}
}
void insert(SepList* s,size_t pos, DataType x)
{
assert(s);
assert(pos <= s->size);
size_t i = 0;
for (i = s->size; i > pos-1; i--)
{
s->arrary[i] = s->arrary[i - 1];
}
s->arrary[pos - 1] = x;
s->size++;
}
void erase(SepList* s, size_t pos)
{
size_t i = 0;
assert(s);
assert(pos <= s->size);
if (pos == s->size)
{
s->arrary[pos - 1] = 0;
s->size--;
}
else
{
for (i = pos - 1; i < s->size - 1; i++)
{
s->arrary[i] = s->arrary[i + 1];
}
s->size--;
}
}
int Find(SepList* s, DataType x)
{
size_t i = 0;
for (i = 0; i < s->size; i++)
{
if (s->arrary[i] == x)
{
break;
}
}
if (i >= s->size)
{
printf("没找到\n");
return -1;
}
else
{
printf("找到了,下表是:%d ", &i);
return i;
}
}
void Remove(SepList* s, DataType x)
{
int i = Find(s, x);
    if (i == 0)
{
  popfront(s);
}
else if (i== (DataType)(s->size - 1))
{
popback(s);
}
else
{
erase(s, i+1);
}
}
void RemoveAll(SepList* s, DataType x)
{
while (Find(s, x) != -1)
{
int i = Find(s, x);
if (i == 0)
{
popfront(s);
}
else if (i == (DataType)(s->size - 1))
{
popback(s);
}
else
{
erase(s, i + 1);
}
}
}
void BubbleSort(SepList* s)
{
size_t i = 0;
size_t j = 0;
for (i = 0; i < s->size - 1; i++)
{
for (j = i; j < s->size; j++)
{
if (s->arrary[i]>s->arrary[j])
{
int tmp = s->arrary[i];
s->arrary[i] = s->arrary[j];
s->arrary[j] = tmp;
}
}
}
}
void SelectSort(SepList* s)
{
size_t i = 0;
size_t j = 0;
int tmp = 0;
for (i = 0; i < s->size - 1; i++)
{
int min = i;
for (j = i + 1; j < s->size; j++)
{
if (s->arrary[min]>s->arrary[j])
{
min = j;
}
}
tmp = s->arrary[min];
s->arrary[min] = s->arrary[i];
s->arrary[i] = tmp;
}
}
int BinarySearch(SepList* s, DataType x)
{
int left = 0;
int right = s->size - 1;
while (left<=right)
{
int mid = left + (right - left) / 2;
if (x > s->arrary[mid])
{
left = mid + 1;
}
else if (x < s->arrary[mid])
{
right = mid - 1;
}
else
{
printf("找到了,下表是:%d \n", mid);
return mid;
}
}
if (left>right)
{
printf("没找到.\n");
return -1;
}


}


void printSepList(SepList* s)
{
    size_t i = 0;
printf("\n");
printf("\n");
printf("\n");


for (i = 0; i < (s->size); i++)
{
printf("%d ", s->arrary[i]);
}
printf("\n");
printf("\n");
printf("\n");


}



test.c文件

#include "test.h"


void list(void)
{
printf("** 1:头插                   2:头删                        **\n");
printf("** 3:尾插                   4:尾删                        **\n");
printf("** 5:插入                   6:删除                        **\n");
printf("** 7:查找                   8:删除指定数字                **\n");
printf("** 9:删除指定的全部数字     10:冒泡排序                   **\n");
printf("** 11:选择排序              12:二分查找寻找指定数字的下标 **\n");
printf("** 13:打印数组             0:退出                         **\n");




}
int main()
{
SepList s;
init_SepList(&s);
while (1)
{
list();
int input = 0;
printf("请选择:");
scanf("%d", &input);
switch (input)
{
int x = 0;
case 1:
printf("请输入需要插入的数字:");
scanf("%d", &x);
pushfront(&s, x);
break;
case 2:
popfront(&s);
break;
case 3:
printf("请输入需要插入的数字:");
scanf("%d", &x);
pushback(&s, x);
break;
case 4:
popback(&s);
break;
case 5:
printf("请输入需要插入的数字:");
scanf("%d", &x);
size_t pos = 0;
printf("请输入需要插入的位置:");
scanf("%d", &pos);
insert(&s, pos, x);
break;
case 6:
printf("请输入需要插入的位置:");
scanf("%d", &pos);
erase(&s,pos);
break;
case 7:
printf("请输入需要插入的数字:");
scanf("%d", &x);
Find(&s,x);
break;
case 8:
printf("请输入需要删除的数字:");
scanf("%d", &x);
Remove(&s, x);
break;
case 9:
printf("请输入需要删除的数字:");
scanf("%d", &x);
RemoveAll(&s, x);
break;
case 10:
BubbleSort(&s);
break;
case 11:
SelectSort(&s);
break;
case 12:
printf("请输入需要寻找的数字:");
scanf("%d", &x);
BinarySearch(&s, x);
break;
case 13:
printSepList(&s);
break;
case 0:
return;
}
}
system("pause");
return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值