C语言线性数据结构

C语言线性数据结构(一)

最近在学习数据结构 写博客记录一下,很久没写过c语言了,也是现学现用。
线性表的顺序存储结构

*顺序表的三个属性:

1.存储空间的起始位置(数组名data) 

2.顺序表最大存储容量(MaxSize) 

3.顺序表当前的长度(length)

编译器为vc6

// 头文件
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "windows.h"
#define MAXSIZE 10 //定义线性表的最大长度
#define bool int
#define false 0
#define true 1
typedef int ElemType; //假定表中元素类型是int

typedef struct{
    
    
	ElemType data [MAXSIZE]; //顺序表的元素(数组)
	int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
bool ListInsert(SqList *L, int i , ElemType e);	//顺序表添加元素的函数
void ListTrans(SqList *L,int i,ElemType a); //顺序表修改元素的函数
void ListDelete(SqList *L,int i); //删除顺序表指定位置的元素
void ShowSqList(SqList *L); //线性表打印函数
void main(){
    
    
	int local;
	SqList L;
	L.length = 0;
	for(local = 1;local <= MAXSIZE;local++)
    {
    
    
        ListInsert(&L,local,local*10);
    }
    //遍历一下当前数组
    printf("\n插入元素后的数组:\n");
    ShowSqList(&L);
	ListTrans(&L,5,666);
	printf("\n修改元素后的数组:\n");
	ShowSqList(&L);
	ListDelete(&L,5);
	printf("\n删除元素后的数组:\n");
	ShowSqList(&L);
}
bool ListInsert(SqList *L, int i , ElemType e){
    
    
	int j;
	if(i<1||i>L->length+1) //判断i的范围是否有效
	return false;
	if(L->length>=MAXSIZE) //当前存储空间已满,不能插入
	return false;
	//插入元素
	//将第i个元素及之后的元素后移
	for(j=L->length;j>=i;j--){
    
    
		L->data[j] = L->data[j-1];
	}
	L->data[i-1] = e;
	L->length++;
	return true;

}
void ListTrans(SqList *L,int i,ElemType a){
    
    
	if (i<1||i>L->length+1)
		printf("修改元素出现错误!\n");
	L->data[i]=a;
}

void ListDelete(SqList *L,int i){
    
    
	int j;
	if (i<1||i>L->length+1)
		printf("删除元素出现错误!\n");
	//注意此处应该从左至右遍历 不能从右至左遍历 我一开始就犯了这个错
	for (j=i;j<L->length;j++){
    
    
		printf("%d\t",j);
		L->data[j-1] = L->data[j];
	}
	L->length--;
}
//线性表查看函数
void ShowSqList(SqList *L)
{
    
    
    int i;
    for(i = 0; i < L->length;i++)
    {
    
    
        printf("%d\t",L->data[i]);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44230855/article/details/107565606