线性表
线性表是最简单最常用的一种数据结构
C语言实现
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define true 1
#define false 0
typedef int status;
typedef int ElemType;
typedef struct List{
ElemType elem[MAXSIZE+1];
int length;
}List,*pList;
//基本操作
//创建长度为len的表并输入信息
pList InitList(int len){
pList L = (pList)malloc(sizeof(List));
L->length=len;
for(int i=1;i<=len;i++){
scanf("%d",&L->elem[i]);
}
return L;
}
//销毁线性表L
status DestroyList(pList L){
return true;
}
//清空表,使L成为一个空表
status ClearList(pList L){
if(L!=NULL){
}
return true;
}
//在第n个位置插入元素elem
ElemType InsertList(pList L,int n,int elem){
L->length++;
if(L->length>=MAXSIZE || n>L->length || n<=0){
printf("插入失败");
exit(-1);
}
for (int i = L->length; i > n; --i)
{
L->elem[i] = L->elem[i-1];
}
L->elem[n]=elem;
return elem;
}
//删除第n个元素
ElemType DeleteElem(pList L,int n){
L->length--;
ElemType elem = L->elem[n];
for (int i = n; i <= L->length; ++i){
L->elem[i]=L->elem[i+1];
}
return elem;
}
//遍历列表
status TraverseList(pList L){
for (int i = 1; i <= L->length; ++i)
{
printf("%d ",L->elem[i]);
}
printf("\n");
return true;
}
//把两个有序的表合起来,然后仍然有序
pList MergeList(pList L1,pList L2){
pList L3= (pList)malloc(sizeof(List));
int i=1;int j=1;int k=1;
while (i<=L1->length && j<=L2->length) {
if(L1->elem[i]<L2->elem[j]){
InsertList(L3,k,L1->elem[i]);
i++;
}else{
InsertList(L3,k,L2->elem[j]);
j++;
}
k++;
}
while(i<=L1->length){
InsertList(L3, k, L1->elem[i]);
i++;k++;
}
while(j<=L2->length){
InsertList(L3, k, L2->elem[j]);
j++;k++;
}
return L3;
}
int main(){
pList L1 = InitList(5);
pList L2 = InitList(6);
TraverseList(L1);
//插入10
InsertList(L1,2,10);
TraverseList(L1);
//删除第二个位置上的10
DeleteElem(L1,2);
TraverseList(L1);
pList L3 =MergeList(L1, L2);
TraverseList(L3);
}