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