静态顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

顺序表分为静态存储的顺序表和动态存储的顺序表。

这里先说明静态顺序表的基本操作的实现:

//SeqList.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<string.h>
#include<assert.h>
#define MAX_SIZE 100
typedef int DataType;
typedef struct SeqList
{DataType array[MAX_SIZE];size_t size;
}SeqList,*pSeqList;void InitSeqList(pSeqList pSeq);
void PrintSeqList(pSeqList pSeq);void PushBack(pSeqList pSeq, DataType x);
void PopBack(pSeqList pSeq);
void PushFront(pSeqList pSeq, DataType x);
void PopFront(pSeqList pSeq);void Insert(pSeqList pSeq, int pos, DataType x);
void Remove(pSeqList pSeq, DataType x);
void RemoveAll(pSeqList pSeq, DataType x);int Find(pSeqList pSeq,DataType x);
void Erase(pSeqList pSeq,DataType pos);
void ReverseList(pSeqList pSeq);
void SortList(pSeqList pSeq);
int  BinarySearch(pSeqList Seq, DataType x);void InitSeqList(pSeqList pSeq)
{memset(pSeq->array,0,sizeof(DataType)*MAX_SIZE);pSeq->size = 0;
}void PushBack(pSeqList pSeq, DataType x)
{assert(pSeq);if(pSeq->size >= MAX_SIZE){printf("SeqList is Full");return;}pSeq->array[pSeq->size] = x;pSeq->size++;
}void PopBack(pSeqList pSeq)
{assert(pSeq);if(pSeq->size <= 0){printf("SeqList is empty");return;}pSeq->array[pSeq->size-1] = NULL;pSeq->size--;
}void PushFront(pSeqList pSeq, DataType x)
{int i = 0;assert(pSeq);if(pSeq->size >= MAX_SIZE){printf("SeqList is Full");return;}for(i = pSeq->size-1; i >= 0; i--){pSeq->array[i+1] = pSeq->array[i];}pSeq->array[0] = x;pSeq->size++;
}void PopFront(pSeqList pSeq)
{int i = 0;assert(pSeq);if(pSeq->size <= 0){printf("SeqList is empty");return;}for(i = 1; i < pSeq->size; i++){pSeq->array[i-1] = pSeq->array[i];}pSeq->size--;
}void PrintSeqList(pSeqList pSeq)
{int i = 0;assert(pSeq);for(i = 0; i < pSeq->size;i++){printf("%d ",pSeq->array[i]);}
}void Insert(pSeqList pSeq, int pos, DataType x)
{int i = 0;assert(pSeq);if(pSeq->size >= MAX_SIZE){printf("SeqList is Full");return;}for(i = pSeq->size-1; i >= pos; i--){pSeq->array[i+1] = pSeq->array[i];}pSeq->array[pos] = x;pSeq->size++;
}int Find(pSeqList pSeq,DataType x)
{int i = 0;assert(pSeq);if(pSeq->size <= 0){printf("SeqList is empty");return;}for(i = 0; i < pSeq->size; i++){if(pSeq->array[i] == x){return i;}}return -1;
}void Erase(pSeqList pSeq,DataType pos)
{int i = 0;assert(pSeq);if(pSeq->size <= 0){printf("SeqList is empty");return;}for(i = pos+1; i < pSeq->size; i++){pSeq->array[i-1] = pSeq->array[i];}pSeq->size--;
}void Remove(pSeqList pSeq, DataType x)
{int pos = Find(pSeq,x);assert(pSeq);if(pos != -1){Erase(pSeq,pos);}else{printf("not exist");}
}void RemoveAll(pSeqList pSeq, DataType x)
{int count = 0;int i = 0;assert(pSeq);if(pSeq->size <= 0){printf("SeqList is empty");return;}for(i = 0; i < pSeq->size; i++){if(pSeq->array[i] == x){count++;}else{pSeq->array[i-count] = pSeq->array[i];}}pSeq->size-=count;
}void ReverseList(pSeqList pSeq)
{int left = 0;int right = pSeq->size-1;assert(pSeq);while(left < right){int tmp = pSeq->array[left];pSeq->array[left] = pSeq->array[right];pSeq->array[right] = tmp;left++;right--;}
}void SortList(pSeqList pSeq)
{int i = 0, j = 0;assert(pSeq);for(i = 0; i < pSeq->size-1; i++){for(j = 0; j < pSeq->size-i-1; j++){if(pSeq->array[j] > pSeq->array[j+1]){int tmp = pSeq->array[j];pSeq->array[j] = pSeq->array[j+1];pSeq->array[j+1] = tmp;}}}
}int BinarySearch(pSeqList pSeq, DataType x)
{int left = 0;int right = pSeq->size-1;assert(pSeq);while(left <= right){int mid = left - (left - right)/2;if(pSeq->array[mid] > x){right = mid-1;}else if(pSeq->array[mid] < x){left = mid+1;}else{return mid;}}return -1;
}#endif //__SEQLIST_H__ //SeqList.c#include<stdio.h>
#include"SeqList.h"void Test1()
{SeqList seq;InitSeqList(&seq);PushBack(&seq,1);PushBack(&seq,2);PushBack(&seq,3);PushBack(&seq,4);PopBack(&seq);PrintSeqList(&seq);
}
void Test2()
{SeqList seq;int ret;InitSeqList(&seq);PushBack(&seq,1);PushBack(&seq,2);PushBack(&seq,3);PushBack(&seq,4);PushFront(&seq,0);PopFront(&seq);Insert(&seq,2,6);ret = Find(&seq,6);printf("%d\n",ret);PrintSeqList(&seq);
}
void Test3()
{SeqList seq;InitSeqList(&seq);PushBack(&seq,1);PushBack(&seq,2);PushBack(&seq,3);PushBack(&seq,4);PushBack(&seq,4);PushBack(&seq,2);PushBack(&seq,5);PushBack(&seq,6);PopBack(&seq);Erase(&seq,2);Remove(&seq,2);RemoveAll(&seq,4);PrintSeqList(&seq);
}
void Test4()
{SeqList seq;int pos;InitSeqList(&seq);PushBack(&seq,1);PushBack(&seq,2);PushBack(&seq,3);PushBack(&seq,4);PushBack(&seq,4);PushBack(&seq,5);ReverseList(&seq);SortList(&seq);pos = BinarySearch(&seq,2);printf("%d\n",pos);PrintSeqList(&seq);
}int main()
{//Test1(); //Test2();//Test3();Test4();return 0;
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 浅谈可变参数

1.可变参数产生原因 首先来看一个简单的例子。 int Add(int x, int y) {return x y; } int main() {int sum 0;sum Add(1, 2);//sum Add(1, 2, 3);//sum Add(1);system("pause");return 0; } 我们可以看到&#xff0c;对于这个代码只可以计算两个数的加法。 …

有两个链表a,b,设结点包括学号,姓名。从a链表中删去与b链表中有相同学号的那些结点。

#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct linknode { int num;char name[20];struct linknode *next; }node; node *creat() { node *h NULL,*s,*t;int d;int i 1; char name1[20];while(1) { printf("输入第…

C语言模拟实现标准库函数之strlen()

strlen() strlen所作的仅仅是一个计数器的工作&#xff0c;它从内存的某个位置 &#xff08;可以是字符串开头&#xff0c;中间某个位置&#xff0c;甚至是某个不确定的内存区域&#xff09; 开始扫描&#xff0c;直到碰到第一个字符串结束符\0为止&#xff0c;然后返回计数…

C语言模拟实现标准库函数之strcpy()

strcpy(dest,src) strcpy是一种C语言的标准库函数&#xff0c;strcpy把从src地址开始且含有\0结束符的字符串复制到以dest开始的地址空间&#xff0c;返回值的类型为char*。 char * my_strcpy(char *str2, char *str1) {assert(*str2);assert(*str1);while(*str1!0){ *str2 …

C语言模拟实现标准库函数之strcat()

strcat() strcat用于将两个char类型链接的函数。 char * my_strcat(char *str1, char *str2) {assert(str2);assert(str1);char * p str1;while (*str1 ! 0){str1;}while (*str1 *str2){;}return p; } int main() {char str1[10] "abc";char str2[10] "de…

模板

模板是泛型编程的基础&#xff0c;即与类型无关的逻辑代码。 利用模板机制可以显著减少冗余信息&#xff0c;能大幅度地节约程序代码&#xff0c;进一步提高面向对象程序的可重用性和可维护性。 模板是实现代码重用机制的一种工具&#xff0c;它可以实现类型参数化&#xff1b;…

C语言模拟实现标准库函数之strstr()

strstr() strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是&#xff0c;则该函数返回str2在str1中首次出现的地址&#xff1b;否则&#xff0c;返回NULL。 char* my_strstr(const char* dest, const char* src) {char * str1 dest;char * str2 src;char …

linux-----强大的find

我又回来了。哈哈。今天我们来说一下linux中的另一个强大的find命令&#xff0c;灰常重要&#xff0c;灰常重要&#xff0c;灰常重要。显而易见&#xff0c;find就是对某一个文件或者目录的查找喽。但是它的一个显著的特点就是&#xff1a;一般放在后台执行&#xff0c;从整个文…

C语言模拟实现标准库函数之strchr()

strchr() 查找字符串s中首次出现字符c的位置 char * my_strchr(char *str1, char str2) {while (*str1 ! str2 && *str1 ! NULL){str1;}return str1; }int main() {char string[17];char *ptr, c r;strcpy(string, "Thisisastring");ptr my_strchr(string…

python 多人连接mysql 进行事务操作 对mysql加锁与释放锁

python 多人连接mysql 对mysql进行事务操作 对mysql加锁与释放锁 下面这个是user1代码块 # -*- coding: utf-8 -*- # user1 import pymysql import timeconn pymysql.connections.Connection(host"localhost", userdebian-sys-maint, passwordwL5wsDKDub4gT2EU…

C语言模拟实现标准库函数之strcmp()

strcmp() C/C函数&#xff0c;比较两个字符串 设这两个字符串为str1&#xff0c;str2&#xff0c; 若str1str2&#xff0c;则返回零&#xff1b; 若str1<str2&#xff0c;则返回负数&#xff1b; 若str1>str2&#xff0c;则返回正数。 char * my_strcmp(char *key,…

linux之task_struct

每个进程中都有一个进程控制块--PCB。PCB--维护进程相关的信息。然而&#xff0c;linux内核的进程控制块就是task_struct结构体&#xff0c;它可以保存进程的信息。 所有运行在系统里的进程都以task_struct链表的形式存在内核里。 每个进程都将它的信息放在task_struct结构体…

python 用元类 type 实现对数据库的ORM 映射

python 实现对数据库的ORM 映射 如果使用pymysql 操作数据库 不借助框架的话&#xff0c;频繁写sql语句, 的确比较麻烦 这里借助 type 元类 对 数据表类实现了 与mysql之间的 映射 直接上代码 import pymysqldef conn_database_execute(sql_str):conn pymysql.connect(host…

C语言模拟实现标准库函数之memcpy()

memcpy&#xff08;&#xff09; 1.如果我们需要对一个数组初始化&#xff0c;把数组的内容全部置0&#xff0c;那么能不能用strcpy() int main() {char arr1[10] { 0 };char arr2[10] " abcdefg ";strcpy(arr2, arr1);system("pause");return 0; } 我…

说说堆及堆排序

堆&#xff1a;是一种数组对象&#xff0c;它可以被看成是一种二叉树结构。 我们把堆的二叉树存储方式分为两种&#xff1a;即大堆和小堆。那么问题来了&#xff0c;什么大堆&#xff1f;什么是小堆&#xff1f; 大堆&#xff1a;让每个父节点的值都大于孩子节点的值。 小堆…

运算符优先级 速查表

运算符优先级 优先级【高到低】&#xff1a; 第一级&#xff1a; 圆括号【&#xff08;&#xff09;】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】 第二级&#xff1a; 逻辑非运算符【!】、按位取反运算符【~】、自增自减运…

linux--几种常见的进程调度算法

进程调度&#xff1a;在操作系统中调度是指一种资源分配&#xff0c;因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。操作系统管理了系统的有限资源&#xff0c;当有多个进程(或多个进程发出的请求)要使用这些资源时&#xff0c;因为资源的有限性&#xff0c;必…

指针数组和数组指针和函数指针

文章目录1.指针数组和数组指针1.int *p1[10];2.int (*p2)[10];2.函数指针char *(*fun1)(char * p1,char *p2)函数指针的概念函数指针的作用&#xff1a;例子1 .调用方式例子2&#xff1a;&#xff08;带注释&#xff09;例子33.做题的小技巧1.指针数组和数组指针 1.int *p1[10…

使用虚拟环境virtualenv 创建虚拟环境出现PermissionError: [Errno 13] Permission denied:

使用虚拟环境virtualenv 创建虚拟环境出现PermissionError: [Errno 13] Permission denied: 原因&#xff1a;虚拟环境安装的目录所属用户非当前用户 解决办法&#xff1a;将目录及其文件的所有者改为当前用户 解决命令&#xff1a;sudo chown -R 当前用户 待更改用户的目录/ …

linux之父子进程的输出

首先&#xff0c;我们来回忆一下父进程与子进程&#xff0c;前几节讲了如何创建子进程&#xff0c;像这样的&#xff0c;pid_t id fork(); 这样我们就创建好了一个子进程&#xff0c;然而fork()函数的返回值是什么呢&#xff1f;这里要记住&#xff1a;子进程返回0&#xff0c…