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]);
}
}