线性表

今天老师讲了线性表。

然后手动实现了一个线性表的小程序。
主要功能就是生成、插入、删除、查询。

    首先,线性表就是一段连续储存的线性空间,是一种数据结构。和数组一样。
    然后线性表常数时间找第i个数,删除的复杂度是o(n)(大概。。。我自己是那么感觉的)。

首先是结构体

typedef int ElemType;
typedef struct{
	ElemType a[MAXSIZE];
	int length;
}SqList;

SqList就是一个线性表了。

创建

void creat_list(SqList * L)
{
	int i;
	printf("\n n=?");
	scanf("%d",&L->length);
	for(i=0;i<L->length;i++)
	{
		printf("\n data %d=?",i);
		scanf("%d",&(L->a[i]));
	}
	
}

插入

void insert_sq(SqList *L,int i,ElemType e){
	int j;
	if(L->length==MAXSIZE)
		printf("\n overflow!");
	else if(i<1||i>L->length+1)
		printf("\n erro e i!");
	else{
		for(j=L->length-1;j>=i-1;j--)
			L->a[j+1]=L->a[j];
		L->a[i-1]=e;
		L->length++;		
	}		
}

删除

ElemType delete_sq(SqList *L,int i){
	ElemType x;int j;
	if(L->length==0)
		printf("\n   是空表。underflow!");
	else if(i<1||i>L->length){
		printf("\n  error i !" );
		x-=1;	
	}	
	else{
		x=L->a[i-1];
		for(j=i;j<=L->length-1;j++)
			L->a[j-1]=L->a[j];
		L->length--;
	}
	return x;
}

查找

int locat_sq(SqList L,ElemType e){
	int i=0;
	while(i<=L.length-1&&L.a[i]!=e)
		i++;
	if(i<=L.length-1)
		return i+1;
	else
		return -1;
}

最后是输出

void out_list(SqList L){
	int i;char ch;
	printf("\n");
	for(int i=0;i<=L.length-1;i++)
		printf("%10d",L.a[i]);
	printf("\n\n   按Enter键,继续");
	ch=getchar();ch=getchar();
}

然后附上主函数

主函数

#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
	ElemType a[MAXSIZE];
	int length;
}SqList;
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
SqList a;
int main(int argc, char *argv[])
{
	int i,k,loc;
	ElemType e,x;
	char ch;
	do{
		printf("\n\n\n");
		printf("\n	1.建立线性表 ");
		printf("\n	2.在i位置插入元素 ");
		printf("\n	3.删除第i个元素,返回其值 ");
		printf("\n	4.查找值为e的元素 ");
		printf("\n	6.结束程序运行 ");
		printf("\n======================================");
		printf("\n	请输入您的选择(1,2,3,4,6)");
		scanf("%d",&k);
		switch(k)
		{
			case 1:{
				creat_list(&a);
				out_list(a);
			}break;
			case 2:{
				printf("\n i,e=?");
				scanf("%d,%d",&i,&e);
				insert_sq(&a,i,e);
				out_list(a);
			}break;
			case 3:{
				printf("\n i=?");
				scanf("%d",&i);
				x=delete_sq(&a,i);
				out_list(a);
				printf("\n x=%d",x);
			}break;
			case 4:{
				printf("\n e=?");
				scanf("%d",&e);
				loc=locat_sq(a,e);
				if(loc==-1)
					printf("\n未找到 %d",loc);
				else
					printf("\n已找到,元素位置是 %d",loc);
			}break;
		} 
	}while(k!=6);
	printf("\n");
	printf("\n");
	ch=getchar();ch=getchar();
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值