这篇文章收录了王道考研课程中涉及的数据结构的所有代码。此外,本博客可能会添加一些额外的代码(不仅限于王道考研),因为408考试中会频繁考察一些冷门的知识点,所以这篇博客会涵盖所有相关的代码。这也是我数据结构的第一轮复习,希望能与大家共同进步。由于博客篇幅的限制,可能无法一次性包含所有内容,
// @FileName :ShunXuBiao->c
// @Time :2023/8/12 13:10
// @Author :YKW
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//线性表:储存空间连续的列表
// # define MaxSize 10
# define InitSize 10
typedef struct SeqList{
int *data; //动态分配数组的指针
int MaxSize;
int length;
}SqList;
void InitList(SqList *L){
L->data=(int*)malloc(InitSize*sizeof(int));
L->length=0;
L->MaxSize=InitSize;
}
void IncreaseSize(SqList *L,int len){
int *p=L->data;
L->data=(int*)malloc((InitSize+len)*sizeof(int));
int i;
for(i=0;i<L->length;i++){
L->data[i]=p[i];
}
L->MaxSize=L->MaxSize+len;
free(p);
}
//因为没有bool,所以用char 1 0代替bool true false,或者直接引入stdbool.h
bool ListInsert(SqList *L,int i,int e){
//代码的健壮性
if(i<1|i>L->length+1)
return false;
if(L->length>=L->MaxSize)
return false;
int j;
for(int j=L->length;j>=i;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
return true;
}
bool ListDelete(SqList *L,int i,int *e){
if(i<1|i>L->length+1)
return false;
*e=*&L->data[i-1];
int j;
for (j=i;j<L->length;j++){
L->data[j-1]=L->data[j];
}
L->length--;
return true;
}
void Show(SqList L){
if(L.length==0)
printf("ZERO!\n");
else{
for(int j=0;j<L.length;j++){
printf("data[%d]=%d\n",j,L.data[j]);
}
}
printf("\n");
}
int GetElem(SqList L,int i){//按位置查找,获取第i个元素的值
if(i>L.length)
return 0;
return L.data[i-1];
}
int LocateElem(SqList L,int i){
for (int j=0;i<L.length;j++){
if(i==L.data[j])
return j+1;
return 0;
}
}
int main()
{
SqList L1,*L2=&L1; //L1是实例,L2是指针
InitList(L2);
Show(L1);
IncreaseSize(L2,10);
Show(L1);
if(ListInsert(L2,1,9)){
printf("Success Insert\n");
Show(L1);
}
else
printf("FAIL");
printf("data[0]=%d\n", GetElem(L1,0));
printf("9 is on %d\n", LocateElem(L1,1));
int e;//e返回值会告诉删除的第i个元素是哪个值
if(ListDelete(L2,1,&e)){
printf("Success Delete [%d]\n",e);
Show(L1);
}
else
printf("FAIL");
return 0;
}
/*
顺序表静态类型定义
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for (int i=0;i<MaxSize;i++)
L->data[i]=i;
L->length=0;
}
int main()
{
SqList L;
InitList(L);
for(int i=0;i<L->length;i++){
printf("data[%d]=%d \n",i,L->data[i]);
}
return 0;
}
*/
//顺序表的实现--静态分配