王道计算机考研 数据结构C语言复现-第一章-顺序表

2024-01-02 21:21:11

这篇文章收录了王道考研课程中涉及的数据结构的所有代码。此外,本博客可能会添加一些额外的代码(不仅限于王道考研),因为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;
}
*/

//顺序表的实现--静态分配

文章来源:https://blog.csdn.net/CSDN_WHO/article/details/135325442
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。