数据结构1

//#pragma once

////1 实现可扩容的顺序表

//typedef int ELEMTYPE;//对数据元素的类型进行重定义

////初始的格子数量

//#define MAXSIZE 10

//typedef struct SeqList

//{

// ELEMTYPE *arr;//1数组,用来存放一会的数据元素

// int length;//2 帮手 length 有效元素个数 告诉我顺序表的尾巴在哪

// int maxsize;//3 当前总的空间大小(以格子为单位)

//}Seqlist,*PSeqlist;

//

////1初始化函数

//void Init_SeqList(Seqlist* psq);

////2购买新节点//单链表的函数

//

////3头部插入

//bool Insert_head(Seqlist* psq, ELEMTYPE val);

////4尾插

//bool Insert_Tail(Seqlist* psq, ELEMTYPE val);

////5按位置查

//bool Insert_Pos(Seqlist* psq, ELEMTYPE val,int pos);

////6头删

//bool Del_head(Seqlist* psq);

////7尾删

//bool Del_Tail(Seqlist* psq);

////8按位置删

//bool Del_Pos(Seqlist* psq, int pos);

////9按值删(只删除这个值出现的第一次)

//bool Del_Val_First(Seqlist* psq, ELEMTYPE val);

////10按值删(删除这个值出现的所有位置)

//bool Del_Val_All(Seqlist* psq, ELEMTYPE val);

////11查找(查找这个值出现的位置,返回起下标即可)

//bool Search_SeqList(Seqlist* psq, ELEMTYPE val);

////12判空

//bool IsEmpty(Seqlist* psq);

////13判满

//bool IsFull(Seqlist* psq);

////14扩容函数

//void Increase(Seqlist* psq);

////15获取有效长度

//void Get_Length(Seqlist* psq);

////16清空

//void Clear(Seqlist* psq);

////17销毁

//void Destroy(Seqlist* psq);

////18打印

//void S

#define MAX 10

//线性表#include<stdio.h>

#include<assert.h>

#include "Seqlist.h"

#include <stdlib.h>

#include <string.h>

#include <errno.h>

//1,有唯一的头

//2,有唯一的尾

//3,除了头之外,剩余的都有直接前驱

//4,除了尾之外,剩余的都有直接后继

//顺序存储-》顺序表

//用一块连续的空间,来存放线性表中的数据元素

//特点 物理地址连续,逻辑上也连续

// 顺序表

// 1 数组(存放数据元素)

//2 有效长度length(即表示元素个数,也表示尾巴在哪)

//3 maxsize(总的格子数量,总的空间大小)

//增删改查

//一个数组 arr

//帮手 告诉我唯一的尾在哪

//length

//帮手 告诉我总的格子数量

//maxsize

void Init_SeqList(Seqlist* psq)

{

assert(psq != NULL);

if (psq == NULL)

return ;

psq->arr = (ELEMTYPE*)malloc(MAX * sizeof(ELEMTYPE));

if (psq->arr == NULL)

{

exit(EXIT_FAILURE);

}

psq->length=0;

psq->maxsize = MAX;

/*assert(psq != NULL);

if (psq == NULL)

return;

psq->arr = (ELEMTYPE*)malloc(MAX * sizeof(ELEMTYPE));

if (psq->arr == NULL)

{

exit(EXIT_FAILURE);

}

psq->length = 0;

psq->maxsize = 0;*/

}

//3头部插入

bool Insert_head(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

if (psq->length = psq->maxsize)

{

Increase(psq);

}

for (int i = psq->length - 1; i > 0; i--)

{

psq->arri + 1 == psq->arri;

}

psq->arr0 == val;

psq->length++;

//assert(psq != NULL);

//if (psq == NULL)

// return;

//if (psq->length = psq->maxsize)

//{

// ELEMTYPE* tmp = (ELEMTYPE*)realloc(psq->arr, psq->maxsize(ELEMTYPE) * 2);

//}

//for (int i = psq->length-1; i >0; i--)

//{

// psq->arri + 1 == psq->arri;

//}

//psq->arr0 == val;

//psq->length++;

}

//4尾插

bool Insert_Tail(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

if (IsFull(psq))

{

Increase(psq);

}

psq->arrpsq-\>length == val;

psq->length++;

//assert(psq != NULL);

//if (psq == NULL)

// return;

//if (ISFULL(psq))

//{

// Increase(psq);

//}

//psq->arrpsq-\>length == val;

//psq->length++;

}

//5按位置插

bool Insert_Pos(Seqlist* psq, ELEMTYPE val, int pos)

{

assert(psq != NULL);

if (psq == NULL)

return;

assert(psq->length >= pos && pos >= 0);

if (IsFull(psq))

{

Increase(psq);

}

for (int i = psq->length - 1; i >= pos; i--)

{

psq->arri+1 == psq->arri;

}

/*psq->arrpos-1 = val;

psq->length++;

return true;

assert(psq != NULL);

if (psq == NULL)

return;

assert(psq->length >= pos && pos >= 0);

if (IsFull(psq))

{

Increase(psq);

}

for (int i = psq->length - 1; i >= pos; i--)

{

psq->arri +1 == psq->i;

}

psq->arrpos - 1 = val;

psq->length++;

return true;*/

}

//6头删

bool Del_head(Seqlist* psq)

{

assert(psq != NULL);

if (psq == NULL)

return;

if (IsEmpty(psq))

{

return false;

}

for (int i=0; i < psq->length; i++)

{

psq->arri == psq->arri+1;

}

psq->length--;

/*assert(psq != NULL);

if (psq == NULL)

return;

if (IsEmpty(psq))

{

return false;

}

for (int i = 0; i < psq->length; i++)

{

psq->arri == psq->arri + 1;

}

psq->length--;*/

}

//7尾删

bool Del_Tail(Seqlist* psq)

{

assert(psq != NULL);

if (psq == NULL)

return;

if (IsEmpty(psq))

{

return false;

}

psq->length--;

/*assert(psq != NULL);

if (psq == NULL)

return;

if (IsEmpty(psq))

{

return false;

}

psq->length--;*/

}

//8按位置删

bool Del_Pos(Seqlist* psq, int pos)

{

assert(psq != NULL);

if (psq == NULL)

return;

assert(psq->length > pos && pos >= 0);

if (IsEmpty(psq))

{

return false;

}

for ( int i = pos ; i < psq->length-1; i++)

{

psq->arri == psq->arri + 1;

}

psq->length--;

//assert(psq != NULL);

//if (psq == NULL)

// return;

//assert(psq->length > pos && pos >= 0);

//if (IsEmpty(psq))

//{

// return false;

//}

//for (int i = pos; i < psq->length - 1; i++)

//{

// psq->arri == psq->arri + 1;

//}

//psq->length--;

}

//9按值删(只删除这个值出现的第一次)

bool Del_Val_First(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

int index=Search_SeqList(psq, val);

if (index == -1)

return false;

for (int i = index+1; i < psq->length - 1; i++)

{

psq->arri-1 == psq->arri;

}

psq->length--;

/*assert(psq!=NULL)

if(psq==NULL)

return;

int index=Search_SeqList(psq, val);

if(index==-1)

return;

for(int i==index+1;i<psq->length-1;i++)

{

psq->arri-1==psq->arri;

}

psq->length--;

*/

}

//10按值删(删除这个值出现的所有位置)

bool Del_Val_All(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

int index = Search_SeqList(psq, val);

if (index == -1)

return false;

int i, j;

while (j <= psq->length)

{

if (psq->arrj != val)

{

psq->arri = psq->arrj;

i++;

j++;

}

else

{

j++;

}

}

psq->length = i;

/*assert(psq != NULL);

if (psq == NULL)

return;

int index = Search_SeqList(psq, val);

if (index == -1)

return false;

int i, j;

while (j <= psq->length)

{

if (psq->arri != val)

{

i++;

j++;

}

else

{

j++;

}

}

psq->length = i;*/

}

//11查找(查找这个值出现的位置,返回起下标即可)

bool Search_SeqList(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

for (int i = 0; i < psq->length; i++)

{

if (psq->arri == val)

{

return i;

}

}

return -1;

}

//12判空

bool IsEmpty(Seqlist* psq)

{

return psq->length = 0;

/*return psq->length = 0;*/

}

//13判满

bool IsFull(Seqlist* psq)

{

return psq->length = psq->maxsize;

/*return psq->length = psq->maxsize;*/

}

//14扩容函数

void Increase(Seqlist* psq)

{

assert(psq != NULL);

if (psq == NULL)

return;

//assert

ELEMTYPE *tmp=(ELEMTYPE*)realloc(psq->arr,psq->maxsize*sizeof(ELEMTYPE)*2);

if (tmp != NULL)

{

psq->arr = tmp;

}

/*assert(psq != NULL);

if (psq == NULL)

return;

ELEMTYPE* tmp = (ELEMTYPE*)realloc(psq->arr, psq->maxsize * sizeof(ELEMTYPE) * 2);

if (tmp != NULL)

{

psq->arr = tmp;

}*/

}

//15获取有效长度

void Get_Length(Seqlist* psq);

//16清空

void Clear(Seqlist * psq)

{

psq->length = 0;

/*psq->length = 0;*/

}

//17销毁

void Destroy(Seqlist* psq)

{

free(psq->arr);

psq->arr = NULL;

psq->length = 0;

psq->maxsize = 0;

//free(psq->arr);

//psq->arr =NULL;

//psq->length = 0;

//psq->maxsize;

}

//18打印

void Show(Seqlist* psq)

{

for (int i = 0; i < psq->length; i++)

printf("%d ", psq->arri);

printf("\n");

/*for (int i = 0; i < psq->length; i++)

printf("%d ", psq->arri);*/

//printf("\n");

}

int main()

{

Seqlist head;

Init_SeqList(&head);

Insert_Tail(&head, 12);

Insert_Tail(&head, 23);

Insert_Tail(&head, 34);

Insert_head(&head, 12);

Show(&head);

Insert_Pos(&head, 123, 2);

}

how(Seqlist* psq);

相关推荐
05候补工程师几秒前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
阿文的代码库3 分钟前
浅谈:无向图的欧拉回路
算法
-Thinker5 分钟前
AI 算法核心原理与实现
人工智能·算法·机器学习
Eloudy6 分钟前
最小权重完美匹配(MWPM)与表面码纠错
算法·量子计算
-森屿安年-7 分钟前
62. 不同路径
算法·动态规划
学计算机的计算基20 分钟前
Codex CLI vs Claude Code 全方位对比:设计哲学与用户体验深度解析
算法
欧阳x天26 分钟前
八大排序算法(C语言实现)
数据结构·算法·排序算法
爱睡懒觉的焦糖玛奇朵28 分钟前
【从视频到数据集:焦糖玛奇朵的魔法工具Dataset Cleaner】
人工智能·python·学习·算法·yolo·音视频
xjxijd30 分钟前
行为感知算法赋能运维,提前预判硬件故障与异常访问
运维·算法
江屿风32 分钟前
C++图论基础拓扑排序经典OJ题流食般投喂
开发语言·c++·笔记·算法·图论