数据结构---c实现顺序表---练习

//初始化顺序表元素
void SeqListInit(SeqList* seq);

//打印顺序表
void SeqListPrint(SeqList* seq,char* ch);

//尾插一个元素
void SeqListPushEnd(SeqList* seq,SeqListType value);

//实现尾删
void SeqListPopEnd(SeqList* seq);

//实现头插一个元素
void SeqListPushStart(SeqList* seq,SeqListType value);

//实现头删
void SeqListPopStart(SeqList* seq);

//取顺序表的任意位置的元素
SeqListType SeqListPopGet(SeqList* seq,size_t pos);
// seq 顺序表的指针  pos 要取得元素下标  

//冒泡排序
void SeqListBubbleSortEx(SeqList* seq);


#pragma once
#include<stdio.h>

#define SeqListMaxNum 1000 
typedef char SeqListType;       // 防止重定义类型 
typedef struct SeqList{
	SeqListType SeqListArr[SeqListMaxNum];
	size_t size;
}SeqList;

//初始化顺序表元素
void SeqListInit(SeqList* seq);

//打印顺序表
void SeqListPrint(SeqList* seq,char* ch);

//尾插一个元素
void SeqListPushEnd(SeqList* seq,SeqListType value);

//实现尾删
void SeqListPopEnd(SeqList* seq);

//实现头插一个元素
void SeqListPushStart(SeqList* seq,SeqListType value);

//实现头删
void SeqListPopStart(SeqList* seq);

//取顺序表的任意位置的元素
SeqListType SeqListPopGet(SeqList* seq,size_t pos);
// seq 顺序表的指针  pos 要取得元素下标  

//冒泡排序
void SeqListBubbleSortEx(SeqList* seq);

#include"SeqList.h"

//实现顺序表的初始化
void SeqListInit(SeqList *seq){
	if(seq == NULL){           //非法输入
		return;                  
	}
	seq->size=0;             //初始化给赋值为0
}

//实现顺序表打印
void SeqListPrint(SeqList *seq,char* ch){
	if(seq == NULL){
		return;              //非法输入
	}
	printf("%s\n",ch);
	int i=0;
	for(;i<seq->size;++i){
		printf("下表元素[%d]的值是[%c]\n",i,seq->SeqListArr[i]);
	}
	printf("size=%ld\n\n",seq->size);
}

//实现尾插
void SeqListPushEnd(SeqList *seq,SeqListType value){
	if(seq == NULL){           //非法输入
		return;
	}
	if(seq->size >= SeqListMaxNum){
		printf("顺序表已满,无法插入\n\n");
		return;
	}
	else{
		seq->SeqListArr[seq->size]=value;
		++seq->size;
	}
}

//实现尾删
void SeqListPopEnd(SeqList* seq){
	if(seq==NULL){             //非法输入
		return;
	}
	--seq->size;
}

//实现头插一个元素
void SeqListPushStart(SeqList* seq,SeqListType value){
	if(seq==NULL){
		return;
	}
	int i=0;
	for(;i<seq->size;++i){
		seq->SeqListArr[i]=seq->SeqListArr[i+1];
	}
	seq->SeqListArr[seq->size]=value;
	++seq->size;
}

//实现头删
void SeqListPopStart(SeqList* seq){
	if(seq==NULL){
		return;
	}
	int i=0;
	for(;i<seq->size-1;++i){
		seq->SeqListArr[i+1]=seq->SeqListArr[i];
	}
	--seq->size;
}

//实现取顺序表中任意位置的元素即查找下标为pos的元素
SeqListType SeqListGet(SeqList* seq,size_t pos){
	if(seq==NULL){
		//非法输入
		return;
	}
	//if(seq->size>SeqListMaxNum){
	//	return;
	//}
	if(pos>=seq->size){
		printf("非法坐标");
		return -1;
	}
	return seq->SeqListArr[pos];
}

//交换函数
void SeqListSwap(SeqListType* a,SeqListType* b){
	size_t temp;
	 *a=temp;
	 *b=*a;
	 temp=*b;
}

//实现冒泡排序
void SeqListBubbleSortEx(SeqList* seq){
	if(seq==NULL){
		//非法输入
		return;
	}
	size_t i=0;
	for(;i<seq->size-1;++i){
		size_t j=0;
		for(;j<seq->size-i-1;++j){
			if(seq->SeqListArr[i]>seq->SeqListArr[i+1]){
			SeqListSwap(seq->SeqListArr[i],seq->SeqListArr[i+1]);
			}
		}
	}
}

	







/////////////////////////////////////////////////////////////
//******测试代码********************************************
//**********************************************************
////////////////////////////////////////////////////////////

//测试尾插
void TestSeqListPushEnd(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	SeqListPrint(&seq,"*****************尾插一个元素**************");
}

//测试尾删

void TestSeqListPopEnd(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	SeqListPopEnd(&seq);
	SeqListPrint(&seq,"*****************尾删一个元素**************");
}

//测试头插
void TestSeqListPushStart(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	SeqListPushStart(&seq,'x');
	SeqListPrint(&seq,"*****************头插一个元素**************");
}

//测试头删
void TestSeqListPopStart(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	SeqListPopStart(&seq);
	SeqListPrint(&seq,"*****************头删一个元素**************");
}

//测试查找下标为pos的元素值
void TestSeqListGet(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	//SeqListGet(&seq,1);
	SeqListPrint(&seq,"*****************查找一个元素**************");
	size_t pos=SeqListGet(&seq,'b');
	printf("元素1的下标是ld%\n",pos);
}

//测试冒泡排序
void TestSeqListBubbleSortEx(){
	SeqList seq;
	SeqListInit(&seq);
	SeqListPushEnd(&seq,'a');
	SeqListPushEnd(&seq,'b');
	SeqListPushEnd(&seq,'c');
	SeqListPushEnd(&seq,'d');
	SeqListPrint(&seq,"*****************冒泡*****************");
}

int main(){
	TestSeqListPushEnd();
	TestSeqListPopEnd();
	TestSeqListPushStart();
	TestSeqListPopStart();
	TestSeqListGet();
	TestSeqListBubbleSortEx();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值