首页 > 编程语言 >20221027数据结构与算法之线性表——顺序表

20221027数据结构与算法之线性表——顺序表

时间:2022-10-29 20:32:33浏览次数:55  
标签:ps begin capacity 线性表 20221027 s1 数据结构 data size

广州疫情被封区,在家学习

20221027数据结构与算法之线性表——顺序表_顺序表

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
//动态顺序表的实现
typedef int data_t;

typedef struct SeqList
{
data_t* data;
size_t size;//实际大小
size_t capacity;//总大小
}SL;

void SeqListInit(SL* ps)//初始化顺序表
{
ps->data = NULL;
ps->size = ps->capacity = 0;
}

void SeqListPrint(SL* ps)//测试打印顺序表
{
int i;
for (i = 0; i < ps->size; i++)
{
printf("%d ", ps->data[i]);
}
printf("\n");
}

void SeqListPushBack(SL* ps, data_t x)//尾插
{
if (ps->capacity == ps->size)//如果顺序表满了,则扩容*2
{
size_t newcapacity = (ps->capacity == 0) ? 4 : ps->capacity * 2;
data_t* temp = (data_t*)realloc(ps->data, newcapacity * sizeof(ps->data));
if (temp == NULL)
{
printf("realloc fail.");
}
ps->data = temp;
ps->capacity = newcapacity;
}
//
ps->data[ps->size] = x;
ps->size++;
}

void SeqListPopBack(SL* ps)//尾删
{
if (ps->size == 0)
{
printf("error:no data");
}
else
{
ps->size--;
}
}

void SeqListPushFront(SL* ps, data_t x)//头插
{
if (ps->capacity == ps->size)//如果顺序表满了,则扩容*2
{
size_t newcapacity = (ps->capacity == 0) ? 4 : ps->capacity * 2;
data_t* temp = (data_t*)realloc(ps->data, newcapacity * sizeof(ps->data));
if (temp == NULL)
{
printf("realloc fail.");
}
ps->data = temp;
ps->capacity = newcapacity;
}
if (ps->size > 0)//如果有数据则向后挪动
{
int begin = ps->size;
while (begin > 0)
{
ps->data[begin] = ps->data[begin - 1];
begin--;
}
}
ps->data[0] = x;//扩容+挪数据之后,再插入
ps->size++;
}

void SeqListPopFront(SL* ps)//头删
{
if (ps->capacity == 0 || ps->size == 0)
{
printf("error:no data.");
}
else
{
ps->data++; //两种方法
ps->size--;
ps->capacity--;
/* int begin = 0;
while (begin < ps->size)
{
ps->data[begin] = ps->data[begin + 1];
begin++;
}
ps->size--;*/
}
}

int SeqListFind(SL* ps, data_t x)//查找
{
int i;
for (i = 0; i < ps->size; i++)
{
if (ps->data[i] == x)
{
return i;//有这个元素,只能找第一个
}
}
return -1;//找不到,
}

void SeqListInsert(SL* ps, data_t x,int k)//任意位置插入
{
//
}

int main()
{
SL s1;
SeqListInit(&s1);

SeqListPushBack(&s1, 4);
SeqListPushBack(&s1, 3);
SeqListPushBack(&s1, 2);
SeqListPushBack(&s1, 1);
SeqListPushFront(&s1, 5);
SeqListPrint(&s1);
int index = SeqListFind(&s1, 2);
printf("找到2了,下标为%d\n", index);

SeqListPopFront(&s1);
SeqListPopFront(&s1);
SeqListPopFront(&s1);
SeqListPopFront(&s1);
SeqListPopFront(&s1);
SeqListPopFront(&s1);//error no data.


return 0;
}














标签:ps,begin,capacity,线性表,20221027,s1,数据结构,data,size
From: https://blog.51cto.com/u_15789360/5806532

相关文章

  • 数据结构 玩转数据结构 4-5 从链表中删除元素
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13448 1重点关注1.1代码草图解析    2课程内容3Codi......
  • 【数据结构-数组】数组的基本操作
    目录1数据结构定义2插入操作3删除操作4按值查找1数据结构定义#defineMAX50typedefstruct{intdata[MAX];intlength;}SqList;初始化:voidIni......
  • 使用数据结构中的队列解决舞伴搭配问题
    ​ (一)问题描述某班有m个女生,n个男生(m不等于n,男女生人数和不能小于20),现要举办一个舞会,男女生分别编号坐在舞池两边的椅子上等待。每曲开始时,依次从男生和女生中各出一......
  • 数据结构 树(第10-14天)
    树的题目太多了,先总结一下树的遍历方式。按照根节点的遍历顺序。可以分为前序、中序、后序。前序遍历,即根–>左–>右的顺序。中序遍历,左–>根–>右。后续遍历,左–>右–>......
  • 数据结构 栈 / 队列(第9天)
    20.有效的括号判断输入的括号是否有效。左右括号··能闭合,顺序合适。思路:用栈实现。遇到左括号就保存在栈中,遇到右括号则需要从栈中弹出一个括号,与之配对。classSolutio......
  • 数据结构 链表(第7、8天)
    链表这里面的链表题比较简单,只要会遍历链表、删除链表节点、反转链表这些基本操作就行。必要时可以画图辅助理解。141.环形链表给定一个链表,判断是否有环。思路:快慢指针。......
  • 数据结构模板整合
    栈#include<iostream>#include<cstdio>#definemaxn100010usingnamespacestd;intn,x;template<typenametype>inlinevoidread(type&x){x=0;boolfl......
  • 基于C语言的通用型数据结构与容器库
    仓库地址:github:https://github.com/hellototoro/hlibcgitee:https://gitee.com/totorohello/hlibclist双向序列容器,用于将它们的元素保持为线性排列,并允许在序列的任何......
  • 数据结构 玩转数据结构 4-3 使用链表的虚拟头结点
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13446 1重点关注1.1代码草图解析 1.2为何为链表头设立虚拟头节点为......
  • 数据结构整理笔记(未完)
    链表本质上是一个结构体指向下一个结构体,第一个结构体为链头,重点是指向下一个(next)结构体代码实现创建链表structElement//链表元素{char*nam......