1.什么是线性表?
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030620010685.png#pic_center)
2.线性表的抽象数据类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210306200206745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p4cjkxNg==,size_16,color_FFFFFF,t_70#pic_center)
3.线性表之顺序表的C语言实现
#include<stdio.h>
#include<stdlib.h>
#define ElementType int
#define MAXSIZE 5
typedef struct LNode *List;
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
struct LNode L;
List PtrL;
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}
int Find(ElementType x,List PtrL)
{
int i=0;
while(i<=PtrL->Last&&PtrL->Data[i]!=x){
i++;
}
if(i>PtrL->Last){
return -1;
}
else
return i;
}
void Insert(ElementType x,int i,List PtrL)
{
int j;
if(PtrL->Last==MAXSIZE-1){
printf("表已满\n");
return;
}
if(i<1||i>PtrL->Last+2){
printf("位置不合法\n");
return;
}
for(j=PtrL->Last;j>=i-1;j--){
PtrL->Data[j+1]=PtrL->Data[j];
}
PtrL->Data[i-1]=x;
PtrL->Last++;
return;
}
void Delete(int i,List PtrL)
{
int j;
if(i<1||i>PtrL->Last+1){
printf("不存在第%d个元素\n",i);
}
for(j=i;j<=PtrL->Last;j++){
PtrL->Data[j-1]=PtrL->Data[j];
}
PtrL->Last--;
return;
}
int main()
{
PtrL = MakeEmpty();
PtrL->Data[0]=12;
PtrL->Data[1]=15;
PtrL->Data[2]=51;
PtrL->Last=2;
for(int i=0;i<=(PtrL->Last);i++){
printf("%d ",PtrL->Data[i]);
}
printf("\n");
return 0;
}
4.线性表之链式表的C语言实现
#include<stdio.h>
#include<stdlib.h>
#define Element int
typedef struct LNode *List;
struct LNode{
Element Data;
List Next;
};
struct LNode L;
List PtrL;
List Empty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Next=NULL;
return PtrL;
}
int Length(List PtrL)
{
List p = PtrL;
int j=0;
while(p){
p = p->Next;
j++;
}
return j;
}
List FindKth(int K,List PtrL)
{
int i=1;
List p = PtrL;
while(p!=NULL&&i<K){
p=p->Next;
i++;
}
if(i==K){
return p;
}
else{
return NULL;
}
}
List Find(Element X,List PtrL)
{
List p=PtrL;
while(p!=NULL&&p->Data!=X){
p=p->Next;
}
return p;
}
List Insert(Element X,int i,List PtrL)
{
List p,s;
if(i==1){
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->Next=PtrL;
return s;
}
p=FindKth(i-1,PtrL);
if(p==NULL){
printf("参数错误\n");
return NULL;
}
else{
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->Next=p->Next;
p->Next=s;
return PtrL;
}
}
List Delete(int K,List PtrL)
{
List p,s;
if(K==1){
s=PtrL;
if(PtrL!=NULL){
PtrL=PtrL->Next;
}
else{
return NULL;
}
free(s);
return PtrL;
}
p=FindKth(K-1,PtrL);
if(p==NULL){
printf("第%d个结点不存在\n",K-1);
return NULL;
}
else if(p->Next==NULL){
printf("第%d个结点不存在\n",K);
return NULL;
}
else{
s=p->Next;
p->Next=s->Next;
free(s);
return PtrL;
}
}
int main()
{
PtrL = Empty();
PtrL = Insert(32,1,PtrL);
PtrL = Insert(56,2,PtrL);
PtrL = Insert(35,3,PtrL);
PtrL = Insert(52,4,PtrL);
return 0;
}