zoukankan      html  css  js  c++  java
  • 顺序表

    seqlist.h


    <span style="font-size:24px;">#ifndef __SEQLIST_H__
    #define __SEQLIST_H__
    #include<stdio.h>
    #include<assert.h>
    #include<string.h>
    #define MAX_SIZE 1000
    typedef int DataType;
    typedef struct seqlist
    {
    	DataType array[MAX_SIZE];
    	size_t size;
    }seqlist;
    typedef enum tag
    {
    	one,//删去第一个
    	more,//所有都删去
    }Tag;
    void Init(seqlist* pSeq);
    void PushBack(seqlist* pSeq, DataType x);
    void PushFront(seqlist* pSeq, DataType x);
    void Print(seqlist* pSeq);
    void PopBack(seqlist* pSeq);
    void PopFront(seqlist*pSeqsssss);
    void Insert(seqlist* pSeq, size_t index, DataType x);
    void Modify(seqlist* pSeq, size_t index, DataType x);
    void removed(seqlist* pSeq, size_t index);
    void Erase(seqlist* pSeq, DataType x, Tag all);
    int Find(seqlist* pSeq, DataType x, size_t index);
    
     
    #endif		//__SEQLIST_H__</span>


    seqlist.c


    #include"seqlist.h"
    
    void Init(seqlist* pSeq)
    {
    	assert(pSeq);
    	memset(pSeq->array, 0, MAX_SIZE*sizeof(DataType));
    	pSeq->size = 0;/////////////size要初始化。否则是随机值会出现故障
    }
    void PushBack(seqlist* pSeq, DataType x)
    {
    	assert(pSeq);
    	assert(pSeq->size <= MAX_SIZE);
    	pSeq->array[pSeq->size++] = x;
    }
    void PushFront(seqlist* pSeq, DataType x)
    {
    	assert(pSeq);
    	assert(pSeq->size <= MAX_SIZE);
    	int i;
    	for (i = pSeq->size; i > 0; i--)
    	{
    		pSeq->array[i] = pSeq->array[i - 1];
    	}
    	pSeq->array[0] = x;
    	pSeq->size++;
    }
    void Insert(seqlist* pSeq, size_t index, DataType x)
    {
    	assert(pSeq);
    	assert(index < pSeq->size);
    	assert(pSeq->size < MAX_SIZE);
    	int i = pSeq->size - 1;
    	for (; i >= (int)index; i--)
    	{
    		pSeq->array[i + 1] = pSeq->array[i];
    	}
    	pSeq->array[index] = x;
    	pSeq->size++;
    }
    void Print(seqlist* pSeq)
    {
    	assert(pSeq);
    	size_t i = 0;
    	for (; i < pSeq->size; i++)
    	{
    		printf("%d ", pSeq->array[i]);
    	}
    	printf("
    ");
    }
    void PopBack(seqlist* pSeq)
    {
    	assert(pSeq);
    	pSeq->size--;
    }
    void PopFront(seqlist* pSeq)
    {
    	assert(pSeq);
    	size_t i;
    	for (i = 0; i < pSeq->size; i++)
    	{
    		pSeq->array[i] = pSeq->array[i + 1];
    	}
    	pSeq->size--;
    }
    void Modify(seqlist* pSeq, size_t index, DataType x)
    {
    	assert(pSeq);
    	assert(index < pSeq->size);
    	pSeq->array[index] = x;
    }
    void removed(seqlist* pSeq, size_t index)
    {
    	assert(pSeq);
    	assert(index < pSeq->size);
    	size_t i = index;
    	for (; i<pSeq->size-1 ; i++)
    	{
    		pSeq->array[i] = pSeq->array[i + 1];
    	}
    	pSeq->size--;
    }
    //返回的值为-1时,找不到此元素;否则返回的值为找到的元素的下标。
    int Find(seqlist* pSeq, DataType x, size_t index)
    {
    	assert(pSeq);
    	int i = index;
    	for (; i < (int)pSeq->size; i++)
    	{
    		if (pSeq->array[i] == x)
    		{
    			return i;
    		}
    	}
    	return -1;
    }
    void Erase(seqlist* pSeq, DataType x, Tag all)
    {
    	assert(pSeq);
    	int ret;
    	ret = Find(pSeq, x, 0);
    	if (ret == -1)
    	{
    		printf("顺序表中没有这个元素
    ");
    	}
    	else if (all == one)
    	{
    		removed(pSeq, ret);
    	}
    	else
    	{
    		for (; ret != -1;)
    		{
    			removed(pSeq, ret);
    			ret = Find(pSeq, x, ret);
    		}
    	}
    }
    
    void Test()
    {
    	seqlist s;
    	Init(&s);
    	PushBack(&s, 1);
    	PushBack(&s, 2);
    	PushBack(&s, 2);
    	PushBack(&s, 2);
    	PushBack(&s, 3);
    	PushBack(&s, 2);
    	PushBack(&s, 4);
    	PushBack(&s, 2);
    	Print(&s);
    	PopBack(&s);
    	Print(&s);
    	PushFront(&s, 5);
    	Print(&s);
    	PopFront(&s);
    	Print(&s);
    	Insert(&s, 0, 24);
    	Print(&s);
    	Modify(&s, 2, 90);
    	Print(&s);
    	removed(&s, 0);
    	Print(&s);
    	Erase(&s, 2, more);
    	Print(&s);
    }
    void main()
    {
    	Test();
    }



  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    提高SQL执行效率的16种方法
    Spring Ioc DI 原理
    java内存泄漏
    转:js闭包
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Best Time to Buy and Sell Stock with Cooldown
    LeetCode Length of Longest Fibonacci Subsequence
    LeetCode Divisor Game
    LeetCode Sum of Even Numbers After Queries
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7141440.html
Copyright © 2011-2022 走看看