数据结构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->arr[i + 1] == psq->arr[i];

}

psq->arr[0] == 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->arr[i + 1] == psq->arr[i];

//}

//psq->arr[0] == val;

//psq->length++;

}

//4尾插

bool Insert_Tail(Seqlist* psq, ELEMTYPE val)

{

assert(psq != NULL);

if (psq == NULL)

return;

if (IsFull(psq))

{

Increase(psq);

}

psq->arr[psq->length ] == val;

psq->length++;

//assert(psq != NULL);

//if (psq == NULL)

// return;

//if (ISFULL(psq))

//{

// Increase(psq);

//}

//psq->arr[psq->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->arr[i+1] == psq->arr[i];

}

/*psq->arr[pos-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->arr[i +1] == psq->[i];

}

psq->arr[pos - 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->arr[i] == psq->arr[i+1];

}

psq->length--;

/*assert(psq != NULL);

if (psq == NULL)

return;

if (IsEmpty(psq))

{

return false;

}

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

{

psq->arr[i] == psq->arr[i + 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->arr[i] == psq->arr[i + 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->arr[i] == psq->arr[i + 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->arr[i-1] == psq->arr[i];

}

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->arr[i-1]==psq->arr[i];

}

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->arr[j] != val)

{

psq->arr[i] = psq->arr[j];

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->arr[i] != 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->arr[i] == 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->arr[i]);

printf("\n");

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

printf("%d ", psq->arr[i]);*/

//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);

相关推荐
雨落在了我的手上2 小时前
C语言之数据结构初见篇(7):单链表的介绍(3)
数据结构
jing-ya2 小时前
day 55 图论part7
java·数据结构·算法·图论
我爱我家8822 小时前
亚洲艺术电影节携澳门文化亮相深圳
人工智能·物联网·算法·区块链·爬山算法
Aawy1202 小时前
C++中的状态模式高级应用
开发语言·c++·算法
zyq99101_12 小时前
蓝桥杯刷题算法实战解析
数据结构·python·算法·蓝桥杯
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章39-FL特征匹配
图像处理·人工智能·opencv·算法·计算机视觉
Liu628882 小时前
C++中的状态模式
开发语言·c++·算法
smchaopiao2 小时前
使用C语言打印几何图形:从三角形到菱形
c语言·开发语言·算法
又菜又爱编程的小白2 小时前
L1-071 前世档案
c++·算法·天梯赛