//
// Created by Luol on 2020/8/1.
//
#include <stdio.h>
typedef int ElemType;
#define LIST_SIZE 1024
typedef struct {
ElemType data[LIST_SIZE];
int last;//指向最后的位置
}SequenList;
SequenList L;
SequenList *P = &L;
/**
*
* @param p 顺序表位置
* @param x 插入的值
* @param k 插入的位置
* @return
*/
//顺序表插入
int Insert_SqList(SequenList *p, ElemType x, int k){
int j;
if(p->last>=LIST_SIZE-1){
return false;//溢出
} else if (k<0||k>p->last+1){
return false;//非法位置越界
} else {
for ( j = p->last; j >=k ; --j) {
p->data[j+1] = p->data[j];//将k后面的元素全部向后移一位
}
p->data[k] = x;//再将要插的值放到要插的位置
p->last = p->last+1;//还要将最后的节点指针修改
}
return true;
}
//顺序表删除
int Delete_SqList(SequenList *p,int k){
if((k>=0&&k<=p->last)&&(p->last!=0)){
for (int i = k; i <= p->last; ++i) {
p->data[i] = p->data[i+1];//正确的删除元素之后,将k这个位置之后的元素向上移动
}
p->last--;
return true;
}
return false;
}
//顺序表查找-查找给定的值
int Locate_SqList(SequenList *p,ElemType key){
for (int i = 0; i < p->last; ++i) {
if (p->data[i] == key){
return i;//获取改元素所在的顺序表的下标
}
}
return -1;
}
//取给定下标的元素值
int Get_SqList(SequenList *p,int i,ElemType e){
if (i<0||i>p->last){
return false;//防止下标越界
}if (p->last<=0){
return false;
}
e = p->data[i];
printf("%d",e);
return true;
}
int main(){
//主函数都是测试代码块
int c;//测试int所占的字节
int a = sizeof(L);//由于L是一个结构体变量故其所占字节数应为:1024*4+4
int b = sizeof(P);//而P是一个指向SequenList类型的指针变量故其所占字节数为4+4
int i;
int a1;
L.data[0] = 22;
L.last = 555;
a1 = L.data[0];
i = L.last;
// printf("%d\n",a);
// printf("%d\n",b);
// printf("%d\n", sizeof(c));
// printf("%d\n", a1);
// printf("%d\n", i);
printf("%d\n",P->data[199]);
printf("%d\n",P->data[0]);
Insert_SqList(P,34,199);
Insert_SqList(P,555,0);
printf("%d\n",P->data[200]);
printf("%d\n",P->data[0]);
Delete_SqList(P,200);
printf("%d\n",P->data[200]);
Insert_SqList(P,34,199);
int location = Locate_SqList(P,34);
printf("%d\n",location);
ElemType f;
Get_SqList(P,199,f);
// printf("%d",*f);
return 0;
}
C语言对线性表的基本操作
最新推荐文章于 2022-11-01 19:03:43 发布