代码
#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 100 //顺序表最大长度
typedef int ElementType;
typedef struct
{
ElementType ar[MAXLEN];
int len; //线性表的长度
}SqList; //结构体类型名称
//!!!这里, 线性表从ar[1] 开始存储,直到ar[MAXLEN-1];
//0<=len<=MAXLEN-1记录最后一个元素的位置
//从位置i插入元素, 1<=i<=len;
//插入前位置i,i+1,...,len的元素依次后移一位;
int InsList(SqList *l,int i,ElementType x)
{
if(i<1 | i>l->len)
{printf("插入的位置不合法!");exit(0);}
if(l->len==MAXLEN-1)
{printf("线性表已达到最大长度!");exit(0);}
int j;
for(j=l->len;j>=i;j--)
{
l->ar[j+1]=l->ar[j];
}
l->ar[i]=x;
l->len++; // 表长+1
return 1;
}
//删除位置i的元素,1<=i<=n;
//删除前位置i+1,...,len的元素以此前移一位;
int DelList(SqList *l,int i,ElementType *x)
{
if(i<1|i>l->len)
{printf("删除的位置不合法!");return 0;}
if(l->len==0)
{printf("线性表已空!");return 0;}
int j;
*x=l->ar[i];
for(j=i;j<l->len;j++)
{
l->ar[j]=l->ar[j+1];
}
l->len--;
return 1;
}
int SearchList(SqList *l, ElementType x)
{
int j=1;
for(j;j<=l->len;j++)
{
if(l->ar[j]==x)return j;
}
return -1;
/**
while((j<=l->len)&&(x!=l->ar[j]))
j++;
if(j<=l->len)
return j;
else return -1;
**/
}
//输出线性表
void displayList(SqList *l)
{
int j=1;
while(j<=l->len)
{
printf("%4d",l->ar[j++]);
}
printf("\n");
}
int main()
{
SqList *l1=(SqList*)malloc(sizeof(SqList));
SqList l2;
while(1)
{
printf("===============l1================\n");
printf("输入线性表的长度(不小于1的整数):\n");
scanf("%d",&l1->len);
if(l1->len<1)
printf("数值不合理!请重来!\n");
else break;
}
int i=1;
printf("输入线性表各元素值:\n");
while (i <= l1->len)
scanf("%d",&l1->ar[i++]);
printf("输入要插入的位置和数值:\n");
{
int u,v;
scanf("%d%d",&u,&v);
InsList(l1,u,v);
}
//{}目的:执行后释放掉u,v以便于以后使用 ;其实也没必要...
printf("输出插入后的线性表: \n");
displayList(l1);
l2=*l1; //结构体整体赋值
printf("===============l2=l1================\n");
displayList(&l2);
printf("输入需要查找的元素值: \n");
int u,v;
scanf("%d",&u);
if(-1!=(v=SearchList(&l2,u)))
printf("所找的元素最先出现在位置%d.\n",v);
int w;
ElementType *x=(ElementType*)malloc(sizeof(ElementType));//不分配空间会出现Segmentation fault.
while(1)
{
printf("输入需要删除的元素的位置: \n");
scanf("%d",&w);
if(w<1|w>l2.len)
printf("位置不合理!请重来!\n");
else break;
}
if(DelList(&l2,w,x))
printf("删除的元素是: %d\n",*x);
printf("输出l1:\n");
displayList(l1);
printf("输出l2:\n");
displayList(&l2);
return 0;
}
运行结果
