数据结构||顺序表的各种功能实现(动态增长版本)

文件一common.h

#ifndef COMMON_H
      
      
        
        #define COMMOM_H
      
      
        
        

      
      
        
        #include<stdio.h>
      
      
        
        #include<stdlib.h>
      
      
        
        #include<string.h>
      
      
        
        #include<stdbool.h>
      
      
        
        #include<assert.h>
      
      
        
        //#include<vld.h>//检测内存泄漏的头文件
      
      
        
        #define DataType int
      
      
        
        #define CAPACITY 8
      
      
        
        typedef struct SeqList
      
      
        
        {
      
      
        
        	DataType* Base;//指向表头的指针
      
      
        
        	size_t size;//顺序表当前存储的个数
      
      
        
        	size_t capacity;//顺序表容量
      
      
        
        }SeqList;
      
      
        
        bool SeqListIsFull(SeqList* psl);
      
      
        
        void SeqListInit(SeqList* psl, DataType sz);
      
      
        
        bool SeqListPushBack(SeqList* psl, DataType x);
      
      
        
        void SeqList_show(SeqList* psl);
      
      
        
        bool SeqListPushFront(SeqList* psl, DataType x);
      
      
        
        size_t SeqListLength(SeqList* psl);
      
      
        
        void SeqListclear(SeqList* psl);
      
      
        
        bool SeqListIsempty(SeqList* psl);
      
      
        
        void SeqListSort(SeqList* psl);
      
      
        
        void SeqListReverse(SeqList* psl);
      
      
        
        bool SeqListModiftByPos(SeqList* psl, int pos, DataType item);
      
      
        
        void Destort_Seqlist(SeqList* psl);
      
      
        
        void ModifyByValue(SeqList* psl,int val,int x);
      
      
        
        int FindByPos(SeqList* psl, int pos, DataType* ret);
      
      
        
        int FindByVal(SeqList* psl, int val, DataType* ret);
      
      
        
        bool Pop_back(SeqList* psl);
      
      
        
        bool Pop_Front(SeqList* psl);
      
      
        
        bool SeqlistInc(SeqList* psl);



        #endif
       
        

2.test.c

#include"common.h"
      
      
        
        int main()
      
      
        
        {
      
      
        
        	SeqList mylist;
      
      
        
        	SeqListInit(&mylist, CAPACITY);//初始化顺序表;
      
      
        
        	int select = 1;
      
      
        
        	int pos = 0;
      
      
        
        	DataType item = 0;
      
      
        
        	DataType ret = 0;
      
      
        
        	DataType flag = 0;
      
      
        
        	while (select)
      
      
        
        	{
      
      
        
        		printf("**************************************\n");
      
      
        
        		printf("****1.push_back     2.push_front******\n");
      
      
        
        		printf("****3.show_list     0.list_exit*******\n");
      
      
        
        		printf("****4.length        5.clear***********\n");
      
      
        
        		printf("****6.sort          7. reverse********\n");
      
      
        
        		printf("****8.Modify_pos    9.Modify_value****\n");
      
      
        
        		printf("****10.Find_pos     11.Find_value ****\n");
      
      
        
        		printf("****12.Pop_back     13.Pop_front  ****\n");
      
      
        
        		printf("**         14.Destory_Seqlist       **\n");
      
      
        
        		printf("请选择>");
      
      
        
        		scanf_s("%d",&select);
      
      
        
        		if (select == 0)
      
      
        
        		{
      
      
        
        			break;
      
      
        
        		}
      
      
        
        		switch (select)
      
      
        
        		{
      
      
        
        		case 1:
        		printf("请输入你要插入的数据,打印-1退出\n");
      
      
        
        			while (scanf_s("%d", &item), item != -1)
      
      
        
        			{
      
      
        
        				SeqListPushBack(&mylist, item);
      
      
        
        			}
      
      
        
        			break; 
      
      
        
        		case 2:
      
      
        
        			printf("请输入你要插入的数据,打印-1退出\n");
      
      
        
        			while (scanf_s("%d", &item), item != -1)
      
      
        
        			{
      
      
        
        				SeqListPushFront(&mylist, item);
      
      
        
        			}
      
      
        
        			break;
      
      
        
        		case 3:
      
      
        
        			SeqList_show(&mylist);
      
      
        
        			break;
      
      
        
        		case 4:
      
      
        
        			printf("%d", SeqListLength(&mylist));
      
      
        
        			printf("\n");
      
      
        
        			break;
      
      
        
        		case 5:
      
      
        
        			SeqListclear(&mylist);
      
      
        
        			break;
      
      
        
        		case 6:
      
      
        
        			SeqListSort(&mylist);
      
      
        
        			break;
      
      
        
        		case 7:
      
      
        
        			SeqListReverse(&mylist);
      
      
        
        			break;
        			case 8:
      
      
        
        			printf("请输入你要插入的位置\n");
      
      
        
        			scanf_s("%d", &pos);
      
      
        
        			printf("请输入你要插入的数据\n");
      
      
        
        			scanf_s("%d", &item);
      
      
        
        			SeqListModiftByPos(&mylist, pos, item);
      
      
        
        			break;
      
      
        
        		case 9:
      
      
        
        			printf("请输入要被修改的数据>");
      
      
        
        			scanf_s("%d", &pos);
      
      
        
        			printf("请输入要改的数据>");
      
      
        
        			scanf_s("%d", &item);
      
      
        
        			ModifyByValue(&mylist, pos,item);
      
      
        
        			break;
      
      
        
        		case 10:
      
      
        
        			printf("请输入要查找的位置>");
      
      
        
        			scanf_s("%d", &item);
      
      
        
        			flag = FindByPos(&mylist,item,&ret);
      
      
        
        			printf("%d\n", flag);
      
      
        
        		case 11:
      
      
        
        			printf("请输入要查找的值>");
      
      
        
        			scanf_s("%d", &item);
      
      
        
        		flag = FindByVal(&mylist, item, &ret);
      
      
        
        		if (flag == -1)
        		{
      
      
        
        			printf("找不到\n");
      
      
        
        		}
      
      
        
        		else
      
      
        
        		printf("%d\n", flag);
      
      
        
        			break; 
      
      
        
        		case 12:
      
      
        
        			Pop_back(&mylist);
      
      
        
        			break;
      
      
        
        		case 13:
      
      
        
        			Pop_Front(&mylist);
      
      
        
        			break;
      
      
        
        		case 14:
      
      
        
        			Destort_Seqlist(&mylist);
      
      
        
        			break;
      
      
        
        		default :
      
      
        
        			printf("输入错误,请重新输入>");
      
      
        
        		}
      
      
        
        

      
      
        
        	}
      
      
        
        	return 0;
      
      
        
        }

3.seqlist.c

#include"common.h"
      
      
        
        //函数的实现
      
      
        
        void SeqListInit(SeqList* psl, DataType sz)
      
      
        
        {
      
      
        
        	psl->capacity = sz > CAPACITY ? sz : CAPACITY;
      
      
        
        	psl->Base = (DataType*)malloc(sizeof(DataType)* (psl->capacity));
      
      
        
        	psl->size = 0;
      
      
        
        }
      
      
        
        bool SeqlistInc(SeqList* psl)
      
      
        
        {
      
      
        
        	assert(psl != NULL);
      
      
        
        	psl->Base = realloc(psl->Base, sizeof(DataType)* 2);
      
      
        
        	if (psl->Base == NULL)
      
      
        
        	{
      
      
        
        		printf("内存开辟失败>");
      
      
        
        		psl->capacity += 2;
      
      
        
        		return true;
      
      
        
        	}
      
      
        
        }
      
      
        
        bool SeqListIsempty(SeqList* psl)
      
      
        
        {
      
      
        
        

      
      
        
        	DataType i = 0;
      
      
        
        	for (i = 0; i < psl->size; i++)
      
      
        
        	{
      
      
        
        		if (psl->Base[i] != 0)
      
      
        
        		{
      
      
        
        			return false;
      
      
        
        		}
      
      
        
        	}
      
      
        
        	return true;
      
      
        
        }
      
      
        
        bool SeqListIsFull(SeqList* psl)
      
      
        
        {
      
      
        
        	return psl->size >= psl->capacity;
      
      
        
        }
      
      
        
        bool SeqListPushBack(SeqList* psl, DataType x)
      
      
        
        {
        assert(psl!=NULL);
      
      
        
        	if (SeqListIsFull(psl))
      
      
        
        	{
      
      
        
        		printf("顺序表已满,%d不能插入\n", x);
      
      
        
        	}
      
      
        
        	psl->Base[psl->size] = x;
      
      
        
        	psl->size++;
      
      
        
        	return true;
      
      
        
        }
      
      
        
        void SeqList_show(SeqList* psl)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	for (i = 0; i < psl->size; i++)
      
      
        
        	{
      
      
        
        		printf("%d ", psl->Base[i]);
      
      
        
        	}
      
      
        
        	printf("\n");
      
      
        
        }
      
      
        
        bool SeqListPushFront(SeqList* psl, DataType x)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	assert(psl != NULL);
      
      
        
        	if (SeqListIsFull(psl))
      
      
        
        	{
      
      
        
        		printf("顺序表已满 x不能插入\n", x);
      
      
        
        	}
      
      
        
        	for (i = psl->size; i>0; i--)
      
      
        
        	{
      
      
        
        		psl->Base[i] = psl->Base[i-1];
      
      
        
        	}
      
      
        
        	psl->Base[i] = x;
      
      
        
        	psl->size++;
      
      
        
        	return true;
      
      
        
        }
      
      
        
        size_t SeqListLength(SeqList* psl)
      
      
        
        {
      
      
        
        	assert(psl);
      
      
        
        	return psl->size;
      
      
        
        }
      
      
        
        void SeqListclear(SeqList* psl)
      
      
        
        {
        assert(psl);
      
      
        
        	if (SeqListIsempty(psl))
      
      
        
        	{
      
      
        
        		printf("顺序表为空");
      
      
        
        		
      
      
        
        	}
      
      
        
        	else
      
      
        
        	{
      
      
        
        		psl->size = 0;
      
      
        
        	}
      
      
        
        }
      
      
        
        void SeqListSort(SeqList* psl)
      
      
        
        {
      
      
        
        	DataType BegainNumber = 0;
      
      
        
        	DataType LastNumber = 0;
      
      
        
        	DataType tmp = 0;
      
      
        
        	for (BegainNumber = 0; BegainNumber < (psl->size)-1; BegainNumber++)
      
      
        
        	{
      
      
        
        		for (LastNumber = 0; LastNumber < (psl->size) - BegainNumber - 1; LastNumber++)
      
      
        
        		{
      
      
        
        			if (psl->Base[LastNumber]>psl->Base[LastNumber + 1])
      
      
        
        			{
      
      
        
        				tmp = psl->Base[LastNumber];
      
      
        
        				psl->Base[LastNumber] = psl->Base[LastNumber + 1];
      
      
        
        				psl->Base[LastNumber + 1] = tmp;
      
      
        
        			}
      
      
        
        		}
      
      
        
        	}
      
      
        
        }
      
      
        
        void SeqListReverse(SeqList* psl)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	DataType Left = 0;
      
      
        
        	DataType Right = (psl->size) - 1;
      
      
        
        	DataType tmp = 0;
      
      
        
        	while (Left < Right)
      
      
        
        	{
      
      
        
        		tmp = psl->Base[Left];
      
      
        
        		psl->Base[Left] = psl->Base[Right];
      
      
        
        		psl->Base[Right] = tmp;
      
      
        
        		Left++;
      
      
        
        		Right--;
      
      
        
        	}
      
      
        
        }
        bool SeqListModiftByPos(SeqList* psl, int pos, DataType item)
      
      
        
        {
      
      
        
        	assert(psl != NULL);
      
      
        
        	if (SeqListIsempty(psl))
      
      
        
        	{
      
      
        
        		return false;
      
      
        
        	}
      
      
        
        	if (pos<0 || pos>psl->size - 1)
      
      
        
        	{
      
      
        
        		printf("输入的位置不合法\n");
      
      
        
        		return false;
      
      
        
        	}
      
      
        
        	psl->Base[pos] = item;
      
      
        
        	return true;
      
      
        
        }
      
      
        
        void ModifyByValue(SeqList* psl,int val,int x)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	while (psl != NULL&& psl->Base[i] != val)
      
      
        
        	{
      
      
        
        		i++;
      
      
        
        	}
      
      
        
        	psl->Base[i] = x;
      
      
        
        }
      
      
        
        int FindByPos(SeqList* psl, int pos,DataType* ret)
      
      
        
        {
      
      
        
        	if (pos<0 || pos>psl->size)
      
      
        
        	{
        	printf("输入的位置不合法>");
      
      
        
        		return 0;
      
      
        
        	}
      
      
        
        	*ret = psl->Base[pos];
      
      
        
        	return *ret;
      
      
        
        }
      
      
        
        int FindByVal(SeqList* psl, int val, DataType* ret)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	while (psl != NULL && psl->Base[i] != val&&i<psl->size)
      
      
        
        	{
      
      
        
        		i++;
      
      
        
        	}
      
      
        
        	if (i < psl->size)
      
      
        
        	{
      
      
        
        		*ret = psl->Base[i];
      
      
        
        		return *ret;
      
      
        
        	}
      
      
        
        	return -1;
      
      
        
        }
      
      
        
        bool Pop_back(SeqList* psl)
      
      
        
        {
      
      
        
        	DataType i = 0;
      
      
        
        	if (psl->size == 0)
      
      
        
        	{
      
      
        
        		printf("顺序表为空,不能删除>");
      
      
        
        		return false;
        		psl->size--;
      
      
        
        	return true;
      
      
        
        }
      
      
        
        bool Pop_Front(SeqList* psl)
      
      
        
        {
      
      
        
        	int i = 0;
      
      
        
        	if (SeqListIsempty(psl))
      
      
        
        	{
      
      
        
        		printf("顺序表为空,不能头删>");
      
      
        
        		return false;
      
      
        
        	}
      
      
        
        		for (i = 0; i <psl->size-1; i++)
      
      
        
        		psl->Base[i] = psl->Base[i + 1];
      
      
        
        		psl->size--;
      
      
        
        	return true;
      
      
        
        }
      
      
        
        void Destort_Seqlist(SeqList* psl)
      
      
        
        {
      
      
        
        	free(psl->Base);
      
      
        
        	psl->Base = NULL;
      
      
        
        	psl->capacity = psl->size = 0;
      
      
        
        }
      
      
        
        	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值