#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
#define TRUE 1
#define FALSE 0
typedef struct{
int elem[MAX];
int length;
}SeqList;
//线性表初始化,构造一个空的线性表L
void InitList(SeqList *L){
L->length=0;
}
//创建线性表
void CreatList(SeqList *L) {
int x,n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
L->elem[i]=x;
L->length++;
}
}
//求线性表长度,返回L中数据元素个数
int ListLength(SeqList *L){
return L->length;
}
//用x返回线性表中第i个元素值
int GetElem(SeqList *L,int i){
int x;
x=L->elem[i];
return x;
}
//按值查找,确定x在表中的位置
int LocationElem(SeqList *L,int x){
for(int i=0;i<L->length;i++){
if(x==L->elem[i]) {
return i;
break;
}
}
}
//插入操作,在i位置前插入一个新元素x,L长度加1
bool ListInsert(SeqList *L,int i,int x){
if(L->length==MAX-1){
printf("表满");
return FALSE;
}
if(i<1 || i>L->length+1){
printf("位置错");
return FALSE;
}
for(int j=L->length;j>=i;j--)//循环到 L->length
L->elem[j+1]=L->elem[j];
L->elem[i]=x;
L->length++;
return TRUE;
}
//删除操作,删除第i个元素,长度减一
bool ListDelet(SeqList *L,int i){
if(i<1 || i>L->length+1){
printf("位置错");
return FALSE;
}
for(int j=i;j<L->length-1;j++){//循环到 L->length-1
L->elem[j]=L->elem[j+1];
}
L->length--;
return TRUE;
}
//判断空,空返回TRUE,非空返回FALSE
bool ListEmpty(SeqList *L){
if(L->length==0) return TRUE;
return FALSE;
}
//将线性表置空
void ClearList(SeqList *L){
L->length=0;
}
//销毁线性表L
bool DestroyList(SeqList *L){
if(L)
{
free(L);
L->length=0;
return TRUE;
}
else
return FALSE;
}
//顺序表合并
void Merge(SeqList *A,SeqList *B,SeqList *L){
int i=1,j=1,k=1;
while(i<=A->length && j<=B->length){
if(A->elem[i]<=B->elem[j])
L->elem[k++]=A->elem[i++];
else
L->elem[k++]=B->elem[j++];
}
while(i<=A->length)
L->elem[k++]=A->elem[i++];
while(j<=B->length)
L->elem[k++]=B->elem[j++];
L->length=A->length+B->length;
}
main(){
SeqList *L;
L = (SeqList *)malloc(sizeof(SeqList));//用指针必须先申请空间
CreatList(L);
int a=ListLength(L);
printf("%d\n",a);
int b=GetElem(L,3);
printf("%d\n",b);
int c=LocationElem(L,3);
printf("%d\n",c);
}
C语言线性表的基本操作
最新推荐文章于 2022-11-01 19:03:43 发布