顺序存储结构c语言实现代码,【数据结构】C语言实现顺序表(静态顺序表)

静态顺序表的定义:

顺序表的概念? --用⼀段地址连续的存储单元依次存储数据元素的线性结构。

为什么要实现顺序表? --比较数组...

顺序表的特点:

访问特定元素的时间复杂度为O(1)

增加、删除⼀个元素的时间负责的为O(n)

长度固定、存储连续

顺序表定义:

typedef int DataType;

#define MAX 100

typedef struct seqlist

{

DataType data[MAX];

int _size;

}SeqList, *pSeqList;//void InitSeqlist(pSeqList plist);//初始化

//void PrintSeqlist(pSeqList plist);//打印顺序表

//void PushBack(pSeqList plist, DataType x);//尾插

//void PopBack(pSeqList plist);//尾删

//void PushFront(pSeqList plist, DataType x);//头插

//void PopFront(pSeqList plist);//头删

//void Insert(pSeqList plist, int pos, DataType x);//指定位置插入

//void Remove(pSeqList plist, DataType x);//指定删除

//void RemoveAll(pSeqList plist, DataType x);

//int Find(pSeqList plist, DataType x);//查找

//void ReverseList(pSeqList plist);//逆置

//void SortList(pSeqList plist);//排序

//void BinarySearch(pSeqList plist, DataType x);//二分查找

具体实现代码:

SeqList.h

#ifndef _SEQ_LIST_H_

#define _SEQ_LIST_H_

#include#include#include#includetypedef int DataType;

#define MAX 100

typedef struct seqlist

{

DataType data[MAX];

int _size;

}SeqList, *pSeqList;

//初始化

void InitSeqList(pSeqList plist)

{

assert(NULL != plist);

memset(plist->data, 0, sizeof(DataType)*MAX);

plist->_size = 0;

}

//打印顺序表

void PrintSeqList(SeqList plist)

{

int i = 0;

if (plist._size == 0)

{

printf("SeqList id empty...\n");

return;

}

for (i = 0; i < plist._size; i++)

{

printf("%d ", plist.data[i]);

}

printf("\n");

}

//尾插

void Push_back(pSeqList plist, DataType x)

{

assert(NULL != plist);

if (plist->_size == MAX)

{

printf("SeqList if full!!!\n");

return;

}

plist->data[plist->_size++] = x;

}

//尾删

void Pop_back(pSeqList plist)

{

assert(NULL != plist);

if (plist->_size == 0)

{

printf("SeqList is empty!!!\n");

return;

}

plist->_size--;

}

void Push_Front(pSeqList plist, DataType x)

{

assert(NULL != plist);

if (plist->_size == MAX)

{

printf("SeqList if full!!!\n");

return;

}

int index = plist->_size;

for (; index > 0; index--)

{

plist->data[index] = plist->data[index - 1];

}

plist->data[index] = x;

plist->_size++;

}

void Pop_Front(pSeqList plist)

{

assert(NULL != plist);

if (plist->_size == 0)

{

printf("SeqList is empty!!!\n");

return;

}

int index = 0;

for (; index < plist->_size; index++)

{

plist->data[index] = plist->data[index + 1];

}

plist->_size--;

}

//指定位置插入

void Insert(pSeqList plist, DataType x, int pos)

{

assert(NULL != plist);

if ((pos >= MAX) && pos < 0)

{

printf("position is error!!!\n");

return;

}

int index = plist->_size;

for (; index>pos; index--)

{

plist->data[index] = plist->data[index - 1];

}

plist->data[index] = x;

plist->_size++;

}

//删除指定数字

void Remove(pSeqList plist, DataType x)

{

assert(NULL != plist);

if (plist->_size == 0)

{

printf("SeqList is empty!!!\n");

return;

}

int isFind = Find(*plist, x);

if (isFind > 0)

{

int index = isFind;

for (; index < plist->_size; index++)

{

plist->data[index] = plist->data[index + 1];

}

plist->_size--;

}

else

printf("not exist\n");

}

//删除指定所有元素

void RemoveAll(pSeqList plist, DataType x)

{

assert(NULL != plist);

if (plist->_size == 0)

{

printf("SeqList is empty!!!\n");

return;

}

int isFind = 0;

while ((isFind = Find(*plist, x))!=-1)

{

int index = isFind;

for (; index < plist->_size; index++)

{

plist->data[index] = plist->data[index + 1];

}

plist->_size--;

}

}

int Find(SeqList plist, DataType x)

{

int index = 0;

for (; index < plist._size; index++)

{

if (x == plist.data[index])

return index;

}

return -1;

}

//这里写冒泡排序

void SortSeqList(pSeqList plist)

{

assert(NULL != plist);

int index = 0;

int index2 = 0;

int flag = 0;

for (; index < plist->_size - 1;index++)

{

flag = 1;

for (index2 = 0; index2 < plist->_size - index - 1; index2++)

{

if (plist->data[index2] > plist->data[index2 + 1])

{

DataType tmp = plist->data[index2];

plist->data[index2] = plist->data[index2 + 1];

plist->data[index2 + 1] = tmp;

flag = 0;

}

}

if (flag == 1)

return;

}

}

//逆置

void Reverse(pSeqList plist)

{

assert(NULL != plist);

int start = 0;

int end = plist->_size - 1;

while (start != end)

{

DataType tmp = plist->data[start];

plist->data[start] = plist->data[end];

plist->data[end] = tmp;

start++;

end--;

}

}

void BinarySearch(pSeqList plist, DataType x)

{

assert(NULL != plist);

int left = 0;

int right = plist->_size - 1;

int mid = (left + right) / 2;

while (left <= right)

{

int mid = (left + right) / 2;

if (plist->data[mid] == x)

{

printf("找到了,是第 %d 个\n", mid + 1);

return 0;

}

else if (x > plist->data[mid])

{

left = mid + 1;

}

else if (x < plist->data[mid])

{

right = mid - 1;

}

}

printf("没有这个数\n");

}

#endif

test.c

#include"SeqList.h"

void FunTest1()

{

SeqList _list;

InitSeqList(&_list);

//尾插

Push_back(&_list,1);

Push_back(&_list, 2);

Push_back(&_list, 3);

Push_back(&_list, 4);

Push_back(&_list, 5);

Push_back(&_list, 6);

Push_back(&_list, 2);

Push_back(&_list, 8);

Push_back(&_list, 2);

PrintSeqList(_list);

//尾删

Pop_back(&_list);

PrintSeqList(_list);

//头插

Push_Front(&_list, 0);

PrintSeqList(_list);

//头删

Pop_Front(&_list);

PrintSeqList(_list);

//指定位置插入

Insert(&_list, 6, 2);

PrintSeqList(_list);

//删除指定元素

Remove(&_list, 2);

PrintSeqList(_list);

//删除所有指定元素

RemoveAll(&_list, 2);

PrintSeqList(_list);

//逆置元素

/*Reverse(&_list);

PrintSeqList(_list);*/

//二分查找

BinarySearch(&_list, 5);

//冒泡排序

SortSeqList(&_list);

PrintSeqList(_list);

}

int main()

{

FunTest1();

system("pause");

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值