顺 序 表

静态(结构体 . )

//###############################################################################################
//###########################################静态(结构体  . )################################################
//###############################################################################################
//###############################################################################################
#include<stdio.h>
#include<stdlib.h> 
#define maxsize 100
typedef struct
{
	char data[maxsize];
	int length;
}sqlist;
//============================================初始化==========================================
void Initlist(sqlist &L)
{
	for(int i=0;i<maxsize;i++)
	L.data[i]=' '; 
	L.length=0;
}
//=======================================结构体没有free========================================
//==================================因为实现不同,那么该操作可以没有 ========================
void free()
{
		
} 
//=======================================正常插入链表======================================= 
bool insertlist(sqlist &L,int point,char x)
{
	if(point<1||point>L.length+1)return false;
	if(L.length>=maxsize)return false;
	for(int i=L.length;i>=point;i--)
	{
		L.data[i]=L.data[i-1];
	}
	L.data[point-1]=x;
	L.length++;
}
//=======================================正常删除链表================================ 
bool deletlist(sqlist &L,int point,char &e)
{
	if(point<1||point>L.length)return false;
	e=L.data[point-1];
	for(int i=point;i<=L.length-1;i++)
	{
		L.data[i]=L.data[i+1];
	}
	L.length--;
}
//==========================================按位查找====================================== 
void getelem(sqlist L,int point,char &e)
{
	e=L.data[point-1];
}
//==========================================按值查找====================================== 
int getpoint(sqlist L,char x)
{
	for(int i=0;i<L.length;i++)
	{
		if(L.data[i]==x)return i+1; 
	}
	return -1;
}
//=============================================长度=================================== 
int getlength(sqlist L)
{
	return L.length;
}
//=============================================是否空================================= 
bool empty(sqlist L)
{
	if(L.length==0)return true;
	return false;
}
//===========================================打印链表 ======================================
void printflist(sqlist L)
{
	for(int i=0;i<=L.length-1;i++)
	{
		if(i==L.length-1)printf("%c\n",L.data[i]);
		else printf("%c ",L.data[i]);
	}
} 
//=============================================尾插========================================== 
void insert(sqlist &L,char x)
{
	L.data[L.length++]=x;
}
int main()
{
	
	sqlist L;
	Initlist(L);
	printf("=================================依次采用尾插法插入 a、b、c、d、e 元素==================================================\n");
	insert(L,'a');
	insert(L,'b');
	insert(L,'c');
	insert(L,'d');
	insert(L,'e');
	printflist(L);
	printf("=================================输出顺序表 L 的长度=====================================================\n");
	printf("%d\n",getlength(L));
	printf("==================================判断顺序表 L 是否为空==================================================\n");
	if(empty(L))printf("空\n"); 
	else printf("不空\n"); 
	printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");
	char e;
	getelem(L,3,e);
	printf("%c\n",e);
	printf("==================================输出元素 a 的位置========================================================\n");
	if(getpoint(L,'a')==-1)printf("不存在该元素\n");
	else printf("%d\n",getpoint(L,'a'));
	printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
	insertlist(L,4,'f');
	printflist(L);
	printf("===================================删除 L 的第 3 个元素====================================================\n");
	deletlist(L,3,e);
	printflist(L);
	printf("===================================因为实现不同,那么该操作free()可以没有 ========================================\n");
}

静态(指针->)

//###############################################################################################
//###########################################静态(指针->)################################################
//###############################################################################################
//###############################################################################################
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct
{
	char data[maxsize];
	int length;
}node,*list;

//============================================初始化========================================== 
void Initlist(list &L)
{
	L=(node*)malloc(sizeof(node));
	L->length=0;
}
//=============================================销毁================================================= 
void DestroyList(list L)		
{
	free(L);
}
//=======================================正常插入链表=============================== 
bool insertlist(list &L,int point,char x)
{
	if(point<0||point>L->length+1)return false;
	if(L->length >=maxsize)return false;
	
	for(int i=L->length;i>=point;i-- )
	L->data[i]=L->data[i-1];
	
	L->data [point-1]=x;
	L->length++;
}
//=======================================正常删除链表================================ 
bool deletlist(list &L,int point,char &e)
{
	if(point<1||point>L->length)return false;
	e=L->data[point-1];	
	for(int i=point;i<L->length;i++)
	{
		L->data[i-1]=L->data[i];
	}
	L->length--;
	return true;
} 
//=========================================按位查找============================== 
void getelem(list L,int point,char &e)
{
	e=L->data[point-1];
}
//========================================按值查找================================ 
int getpoint(list L,char x)
{
	for(int i=0;i<L->length;i++)
	{
		if(L->data[i]==x)return i+1;
	}
	return -1;
}
//=========================================长度================================================ 
int getlength(list L)
{
	return L->length;
}
//=========================================是否空============================================= 
bool empty(list L)
{
	if(L->length==0)return true;
	return false;
}

//============================================尾插=============================================
void insert(list &L,char x)
{
	L->data[L->length++]=x;
	
}
//===========================================打印链表 ======================================
void printlist(list &L)
{
	for(int i=0;i<L->length;i++)
	{
		printf("%c ",L->data[i]);
	}
	printf("\n");
}
int main()
{
	list L;
	Initlist(L);
	printf("=================================依次采用尾插法插入 a、b、c、d、e 元素==================================================\n");
	insert(L,'a');
	insert(L,'b');
	insert(L,'c');
	insert(L,'d');
	insert(L,'e');
	printlist(L);
	printf("=================================输出顺序表 L 的长度=====================================================\n");
	printf("%d\n",getlength(L));
	printf("==================================判断顺序表 L 是否为空==================================================\n");
	if(empty(L))printf("空\n"); 
	else printf("不空\n"); 
	printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");
	char e;
	getelem(L,3,e);
	printf("%c\n",e);
	printf("==================================输出元素 a 的位置========================================================\n");
	if(getpoint(L,'a')==-1)printf("不存在该元素\n");
	else printf("%d\n",getpoint(L,'a'));
	printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
	insertlist(L,4,'f');
	printlist(L);
	printf("===================================删除 L 的第 3 个元素====================================================\n");
	deletlist(L,3,e);
	printlist(L);
	printf("====================================操作free()========================================\n");
	DestroyList(L);
}


动态(结构体 . )

//###############################################################################################
//###########################################动态(结构体  . )################################################
//###############################################################################################
#include<stdio.h>
#include<stdlib.h> 
#define IncreaseSize 10   //增加长度 
#define InitSize 100      //默认最大长度
typedef struct
{
	char* data;      //指向第一个元素的地址 
	int MaxSize;    //顺序表最大长度 
	int length;     //顺序表当前长度	
}SeqList;  
//==========================================初始化============================================= 
bool InitList(SeqList &L)
{
	//使用malloc函数申请一片连续的空间
	L.data = (char* )malloc(InitSize*sizeof(char));
	if(L.data==NULL)return false;
	L.length=0;
	L.MaxSize=InitSize;
	return true;
}
//=======================================结构体没有free======================================== 
void DestroyList(SeqList L)		
{
	
}
//=======================================正常插入链表=======================================
bool ListInsert(SeqList &L,int i,char e) 
{
	if(i<1||i>L.length+1)return false;		//i属于[1~length+1]
	
	if(L.length >= L.MaxSize) 
	{
		char* newbase=(char*)realloc(L.data,(L.length+IncreaseSize)*sizeof(char));
		if(newbase==NULL)return false;
		L.data=newbase;
		L.MaxSize+=IncreaseSize;
	}
										
	for(int j=L.length ;j>=i;j--)			 
	L.data[j]=L.data[j-1];  			
	L.data[i-1]=e;              			 
	L.length ++;				            
	return true; 
}
//=======================================正常删除链表================================
bool ListDelete(SeqList &L,int i,char &e) 
{
	if(i<1||i>L.length)return false;		//删除[1~length]中的 
	e=L.data[i-1];                          //删除元素赋值给e  
	for(int j=i ;j<L.length;j++) 
		L.data[j-1]=L.data[j];   //data[i-1]=data[i]将后边元素前移,删除3,下标2,即a[3]a[4]前移 
	L.length --;				 //长度减1 
	return true; 
}
//=========================================长度==================================
int getlength(SeqList L)
{
	return L.length;
}
//=========================================是否空================================= 
bool empty(SeqList L)
{
	if(L.length==0)return true;
	return false;
}
//=======================================按位查找============================= 
int get(SeqList L,int i)
{
	return L.data [i-1];
}
//=======================================按值查找============================= 
int LocateElem(SeqList L,char e)
{
	for(int i=0;i<L.length;i++)
	if(L.data[i]==e)return i+1;//成功返回i+1
	return 0;	               //查找失败
} 
//=======================================打印链表=============================== 
void printlist(SeqList &L)
{
	for(int i=0;i<L.length;i++)
	{
		printf("%c ",L.data[i]);
	}
	printf("\n");
}

int main()
{
	SeqList L;
	InitList(L);
	printf("=================================依次采用尾插法插入 a、b、c、d、e 元素==================================================\n");
	ListInsert(L,1,'a');
	ListInsert(L,2,'b');
	ListInsert(L,3,'c');
	ListInsert(L,4,'d');
	ListInsert(L,5,'e');
	printlist(L);
	printf("=================================输出顺序表 L 的长度=====================================================\n");
	printf("%d\n",L.length);
	printf("==================================判断顺序表 L 是否为空==================================================\n");	
	if(empty(L))printf("空\n");
	else printf("不空\n");
	printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");	
	printf("%c\n",L.data[2]);
	printf("==================================输出元素 a 的位置========================================================\n");
	printf("%d\n",	LocateElem(L,'a'));
	printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
	ListInsert(L,4,'f');
	printlist(L);
	printf("===================================删除 L 的第 3 个元素====================================================\n");
	char e;
	ListDelete(L,3,e);
	printlist(L);
	printf("===================================因为实现不同,那么该操作free()可以没有 ========================================\n");	
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值