• 顺序表


    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();
    }



  • 相关阅读:
    js点击改变元素标签的样式JQ,动态加减class样式
    设置OFFICE默认比例,不分成两栏
    如何更改win7任务管理器的背景。ctrl+alt+delete调出来的界面的背景
    SQLServer 查询分析器里大小写转换快捷键
    SQL Server查询分析器里语句执行事务控制,防止增删改错
    JS生成二维码,文字,URL生成动态二维码,并在GridView里动态调用
    GridView动态绑定字段做参数,动态调用JS传参-JS
    sql server分页语句原始语句
    SQL 查询--日期条件(今日、昨日、本周、本月)
    将UIWebView显示的内容转为图片和PDF
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7141440.html
Copyright © 2020-2023  润新知