没有学过计算机的数据结构,感觉多少懂点比较好,从基础来,数组操作开始。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*线性表顺序存储操作*/
#define MAX 100
#define ElemType int
typedef struct
{
ElemType elem[MAX];
int length;
}SeqList;
//初始话一个线性表
void InitList_Seq( SeqList *L)
{
L->length=0;
}
void CreatList(SeqList *L)//创建一个顺序表
{
ElemType x;
printf("请输入元素:.\n");
scanf("%d",&x);
while(x!=-1)//有的时候可能不会输入完所有的数据,-1作为停止标志位
{
L->elem[L->length]=x;
L->length++;
scanf("%d",&x);
}
}
void ListInsert(SeqList *L,ElemType data,int pos)
{
int i;
if(L->length==MAX)//检查是否满了
{
printf("表满了.\n");
}
else if(pos>L->length||pos<1)
{
printf("插入位置错误.\n");
}
else
{
for(i=L->length;i>=pos;i--)//第pos个元素(包括位置pos)后面的都要后移动
{
L->elem[i]=L->elem[i-1];
}
L->elem[pos-1]=data;//在第pos位置插入
L->length++;
}
}
void ShowList(SeqList *L)
{
int i=0;
for(i=0;i<L->length;i++)
{
printf("%d ",L->elem[i]);
}
printf("\n");
}
void FindList(SeqList *L,ElemType obj)//查找
{
int i=0;
while(i<L->length&&L->elem[i]!=obj)
{
i++;
}
if(i<=L->length)
{
printf("%d在第%d个位置: .\n",obj,i+1);
}
else
{
printf("没找到.\n");
}
}
void DelList(SeqList *L,int pos)//删除
{
if(pos>L->length||pos<1)
{
printf("输入数据位置错误");
}
else
{
for(;pos<L->length;pos++)
{
L->elem[pos-1]=L->elem[pos];
}
L->length--;
}
}
void AddList(SeqList *obj,SeqList *src)//合并
{
int i;
if(obj->length+src->length>MAX)
{
printf("空间不足数据会丢失");
}
else
{
for(i=0;obj->length<MAX&&i<src->length;obj->length++,i++)
{
obj->elem[obj->length]=src->elem[i];
}
}
}
int main()
{
SeqList L,L2;
InitList_Seq(&L);
CreatList(&L);
ShowList(&L);
InitList_Seq(&L2);
CreatList(&L2);
ShowList(&L2);
ListInsert(&L,0,5);
FindList(&L,5);
ShowList(&L);
DelList(&L,5);
AddList(&L,&L2);
ShowList(&L);
}