数据结构 -线性表顺序存储

#include <stdio.h>
#include <stdlib.h>

// 顺序表的数组存储结构
#define ListSize 100
typedef char DataType;
typedef struct{
	DataType data[ListSize];
	int length;
}SeqList;

SeqList mylist;//global value 

//在指定位置插入元素 
void InsertList(SeqList *L,int pos,DataType val)
{
	int i,q=0;
	if(pos<1 || pos>L->length+1) //   假如顺序表为 1,2,3,4,5,可以插入的位置是1,2,3,4,5,6 
	{
		printf("position error\n");
		return;
	}
	if(L->length>=ListSize){   //当length=ListSize时,表示顺序表已满 
		printf("overflow\n");
		return;
	}
	
	for( i=L->length ;i>=pos;i--){  //当i的位置为1——length+1时需要移动length-i+1 
		L->data[i]=L->data[i-1];
		q++;
	}
	L->data[pos-1]=val;
	printf("循环体执行了%d次,理论上计算值为n-i+1次%d\n",q,L->length-pos+1);
	L->length ++;
	printf("在顺序表中插入新的元素%c在表中%d的位置",val,pos);
	
}
DataType  DeleteList(SeqList *L,int pos)//在顺序表L中第i个位置之前插入一个新的元素下
{
	int i,q=0;  
	DataType x;
	if(pos<1 || pos>L->length) 
	{
		printf("position error\n");
		exit (0); //程序非正常退出,并给一个统一的返回值0,在stdlib.h中有定义 
	}
	x=L->data[pos-1]; 

/*	for(i=pos-1;i+1<L->length ;i++){
		q++;
		L->data[i]=L->data[i+1];
		
	}
*/	
	
	for(i=pos;i<L->length;i++) {
		q++;
		L->data[i-1]=L->data[i]; 
	}
	
	L->length --;
	printf("表中位置%d的元素%c已经被删除了\n",pos,x); 
	printf("循环体执行了%d次,理论上计算值为n-i次%d\n",q,L->length+1-pos);
	return x;
}

void PrintList(SeqList *L)   //打印输出顺序表 
{
	int i;
	for(i=0;i<L->length;i++){
		printf("%c,",L->data[i]);
	}
	printf("\n");
}
//创建一个顺序表 
CreateList(SeqList *L)
{
	int i=0;
	L->length=0;
	char ch;
	ch=getchar();
	printf("创建的顺序表如下:");
		while(ch!='\n'){
			L->data[i]=ch;
			
			L->length++;
			
			ch=getchar();
			printf("%c,",L->data[i]);
			i++;
		}
		printf("表长length=n=%d\n",L->length);
 } 
//顺序表逆置 
void Converts(SeqList *L){
	int i;
	DataType temp;
	for(i=0;i<L->length/2;i++)
	{
		temp=L->data[i];
		L->data[i]=L->data[L->length-1-i];
		L->data[L->length-1-i]=temp;
		
	}
	return;
}
void MaxMin(SeqList *L,DataType*max,DataType *min,int *k,int *j){
	int i;
	*max=L->data[0];*min=L->data[0];
	*k=*j=0;
	for(i=1;i<L->length;i++) {
		if(L->data[i]>*max){
			*max=L->data[i];*k=i;
		}
			
		else if (L->data[i]<*min){
			*min=L->data[i];*j=i;
		}
			
	}
}

int main()
{
	
	int max=0,min=0,k=0,j=0;
	
	
	CreateList(&mylist);
	InsertList(&mylist,9,'A'); 
	PrintList(&mylist);
	DeleteList(&mylist,9);
	PrintList(&mylist);
	Converts(&mylist);
	PrintList(&mylist);
	MaxMin(&mylist,&max,&min,&k,&j);
	printf("max=%c,min=%c,k=%d,j=%d",max,min,k,j);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值