今天刚学了数据结构,老师教的我是云里雾里的,晚上回来自己又教程视频,不管怎么说算是简单的实现了顺序表的一些简单功能。
顺序表里的难点有向顺序表里插入元素,删除元素,查询元素位置这几个函数比较难写,我自己根据这几个难点做了几个图片来解释这几个功能的具体实现:
//插入元素
int InsertList(sqlink L,int data,int no){
int j;
if(L->last >= maxsize-1){
printf("没有空闲空间!\n");
return 0;
}else if(no<0||no>L->last+1){
printf("插入位置不存在!\n");
return 0;
}else{
for(j=L->last;j>=no-1;j--)
L->data[j+1] = L->data[j];
L->data[no-1] = data;
L->last++;
return 0;
}
}
//删除元素
int DeleteList(sqlink L,int no){
int j;
if(no<0||no>L->last){
printf("删除的元素不存在");
return 0;
}else{
for(j=no;j+1<=L->last;j++)
L->data[j] = L->data[j+1];
L->last--;
return 0;
}
}
//定位元素
int LocateList(sqlink L,int data){
int i = 0;
while(i<=L->last&&L->data[i]!=data)
i++;
if(i<L->last) return i;
else return 0;
}
所有代码的实现:
#include<stdio.h>
#include<malloc.h>
#define maxsize 1024 //线性表的最大长度
typedef struct{ //表的类型
int data[maxsize];//表的储存空间
int last;
}sqlist,*sqlink; //说明标示符
void CreateList(sqlink L);//创空表
void ClearList(sqlink L);//置空表
int GetList(sqlink L,int no);//取表元素
int LengthList(sqlink L);//求表长
int InsertList(sqlink L,int data,int no);//插入元素
int DeleteList(sqlink L,int no);//删除元素
int LocateList(sqlink L,int data);//定位元素
int EmptyList(sqlink L);//判空表
void PrintList(sqlink L);//打印表元素
int main(){
sqlink L = (sqlink)malloc(sizeof(sqlist));
CreateList(L);
PrintList(L);
int data,x;
printf("请输入要插入的数据和位置:");
scanf("%d %d",&data,&x);
InsertList(L,data,x);
PrintList(L);
return 0;
}
void CreateList(sqlink L){
int tempNo = 1;
int tempData = 0;
do{
printf("请输入顺序表第%d个元素:",tempNo);
scanf("%d",&tempData);
if(tempData!=-1){
L->data[tempNo-1] = tempData;
L->last = tempNo-1;
tempNo++;
}
}while(tempNo<=maxsize&&tempData!=-1);
}
void PrintList(sqlink L){
int i;
for(i = 0;i<LengthList(L);i++){
printf("%d ",L->data[i]);
}
printf("\n");
}
void ClearList(sqlink L){
L->last = -1;
}
int GetList(sqlink L,int no){
int tempData = 0;
tempData = L->data[no-1];
return tempData;
}
int LengthList(sqlink L){
int tempL;
tempL = L->last+1;
return tempL;
}
//插入元素
int InsertList(sqlink L,int data,int no){
int j;
if(L->last >= maxsize-1){
printf("没有空闲空间!\n");
return 0;
}else if(no<0||no>L->last+1){
printf("插入位置不存在!\n");
return 0;
}else{
for(j=L->last;j>=no-1;j--)
L->data[j+1] = L->data[j];
L->data[no-1] = data;
L->last++;
return 0;
}
}
//删除元素
int DeleteList(sqlink L,int no){
int j;
if(no<0||no>L->last){
printf("删除的元素不存在");
return 0;
}else{
for(j=no;j+1<=L->last;j++)
L->data[j] = L->data[j+1];
L->last--;
return 0;
}
}
//定位元素
int LocateList(sqlink L,int data){
int i = 0;
while(i<=L->last&&L->data[i]!=data)
i++;
if(i<L->last) return i;
else return 0;
}