C语言实现线性表

时间:2025-03-14 15:24:13
#include<> #include<> #define MAXSIZE 100 //定义线性表最大长度 /*定义顺序表*/ typedef struct { int data[MAXSIZE]; //线性表占用的数组空间 int length; //存储线性表的长度 }SeqList; /*初始化顺序表*/ void InitList(SeqList *L) { L->length=0; //表长为零 } /*建立顺序表*/ int CreatList(SeqList *L,int a[],int n) { if(n>MAXSIZE) { printf("空间不足,无法建立顺序表\n"); return 0; } for(int k=0;k<n;k++) { L->data[k]=a[k]; } L->length=n; } /*判空顺序表*/ int Empty(SeqList *L) { if(L->length==0) return 1; else return 0; } /*求顺序表的长度*/ int length(SeqList *L) { return L->length; } /*遍历顺序表*/ void printList(SeqList *L) { for(int i=0;i<L->length;i++) printf("%d ",(L->data[i])); } /*按内容查找*/ /*在顺序表中查找到与指定值X相同的数据元素位置*/ int LocateElem(SeqList *L,int x) { for(int i=0;i<L->length;i++) { if(L->data[i]==x) return i+1; //查找成功,返回序号(第几个元素) } return 0; } /*按序号查找*/ /*根据位置i获取相应位置数据元素的内容*/ int GetElem(SeqList *L,int i,int *e) {//若查找成功,则通过指针参数e返回值 if(i<1||i>L->length) { printf("查找位置非法\n"); return 0; } else { *e=L->data[i-1]; //第i-1个位置为第i个数据 return 1; } } /*插入操作*/ /*将新元素x放在第i个位置*/ /*在第i个位置上插入新结点X,使长度为n的线性表变为长度n+1*/ int InsertList(SeqList *L,int i,int x) { if(i<1||i>L->length+1) { printf("插入位置不合法\n"); return 0; } if(L->length==MAXSIZE) { printf("存储空间已满"); return 0; } for(int j=L->length-1;j>=i-1;j--) //length-1(如果存入了n个元素,则最后一个元素的下标为n-1) { L->data[j+1]=L->data[j]; } L->data[i-1]=x; L->length++; return 1; } /*删除操作*/ /*将表中第i个结点删除,使线性表变为长度为n-1的线性表*/ int DeleteList(SeqList *L,int i,int *e) { if((i<1)||(i>L->length)) { printf("删除位置错误\n"); return 0; } if(L->length==0) { printf("表中没有可删的元素\n"); return 0; } *e=L->data[i-1];//把要删除的数据返回 for(int j=i;j<=L->length-1;j++) { L->data[j-1]=L->data[j]; } L->length--; return 1; } /*修改操作*/ int Modify(SeqList *L,int i,int x) { if (i > L->length || i < 1) { printf("位置错误!\n"); return 0; } L->data[i-1] = x;//i是下标,比实际存放位置大一 return 1; } int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int i,x; SeqList list1; //初始化顺序表 InitList(&list1); if (Empty(&list1)) { printf("初始化顺序表成功!\n"); } printf("给顺序表赋值:1、2、3、4、5、6、7、8、9、10\n遍历并输出\n"); //建立一个长度为10的线性表 CreatList(&list1,a,10); //遍历输出顺序表 printList(&list1); printf("\n将100放在第三位:\n"); InsertList(&list1, 3, 100); printList(&list1); if (Modify(&list1, 3, 50) == 1) { printf("\n把第三位改成50\n"); printList(&list1); } if (DeleteList(&list1, 4, &x) == 1) { printf("\n把第四位删除,删除的值是%d\n",x); printList(&list1); } return 0; }