顺序表有关操作的练习

代码

#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;
}

运行结果


猜你喜欢

转载自blog.csdn.net/lituusliu/article/details/77206446
今日推荐