c语言实现线性表

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define MAX_SIZE 5
typedef int DataType;
typedef struct Seqlist  
{
DataType arr[MAX_SIZE];
size_t size;
}Seqlist;
void PrintSeqList(Seqlist *pSep);
void InitSeqList(Seqlist *pSep);
void PushBack(Seqlist *pSep);
void PopBack(Seqlist *pSep);
void PushFront(Seqlist *pSep);
void PopFront(Seqlist *pSep);
void Insert(Seqlist *pSep, size_t pos);
int Find(Seqlist *pSep, size_t pos,DataType x);
void Erase(Seqlist *pSep, size_t pos);
int Remove(Seqlist *pSep, DataType x);
void RemovAll(Seqlist *pSep, DataType x);
void BubbleSort(Seqlist *pSep);
void SelectSort(Seqlist *pSep);//一次选出最大最小的数放在两段
int BinarySearch(Seqlist *pSep, DataType x);
void PrintSeqList(Seqlist *pSep)
{
assert(pSep);
if (pSep->size <= 0)
{
printf("没有数据可以打印!\n");
return ;
}
int i = 0;
for (i = 0; i < (int)pSep->size; i++)
{ 
printf("%d ", pSep->arr[i]);
}
printf("\n");
}
void InitSeqList(Seqlist *pSep)
{
assert(pSep);
memset(pSep->arr, 0, sizeof(DataType)*MAX_SIZE);
pSep->size=0;
}
void PushBack(Seqlist *pSep)
{
assert(pSep);
if (pSep->size >(MAX_SIZE-1))
{
printf("数据已满!\n");
return;
}
else
{ 
scanf("%d", &pSep->arr[pSep->size]);
pSep->size++;
}
}
void PopBack(Seqlist *pSep)
{
assert(pSep);
if (pSep->size <=0)
{
printf("没有数据!");
return;
}
pSep->arr[pSep->size] = 0;
pSep->size--;
}
void PushFront(Seqlist *pSep)
{
assert(pSep);
int i = 0;
if (pSep->size >(MAX_SIZE-1))
{
printf("数据已满!\n");
return;
}
for (i = pSep->size; i >0; i--)
{
pSep->arr[i] = pSep->arr[i-1];
}
scanf("%d", &pSep->arr[0]);
pSep->size++;
}
void PopFront(Seqlist *pSep)
{
assert(pSep);
if (pSep->size <=0)
{
printf("没有数据!");
return;
}
else
{
int i = 0;
for (i = 1; i < (int)pSep->size; i++)
{
pSep->arr[i - 1] = pSep->arr[i];
}
pSep->size--;
}
}
void BubbleSort(Seqlist *pSep)
{
assert(pSep);
}
void Insert(Seqlist *pSep, size_t pos)
{
assert(pSep);
assert(pos<=pSep->size);
int i = 0;
if (pSep->size >(MAX_SIZE - 1))
{
printf("数据已满!\n");
return;
}
else
{
for (i = (int)pSep->size; i >= pos ; i--)
{
pSep->arr[i] = pSep->arr[i - 1];
}
scanf("%d", &pSep->arr[pos-1]);
pSep->size++;
}
}
int Find(Seqlist *pSep, size_t pos,DataType x)
{
assert(pSep);
int i = 0;
if (pos > pSep->size && pos < 0)
{
printf("输入位置不对!\n");
return 0;
}
else
{
for (i = pos; i < pSep->size; i++)
{
if (pSep->arr[pos] == x)
{
printf("已找到%d\n", pSep->arr[pos]);
return i;
}
}
printf("没有这个数!\n");
}
return -1;
}
void Erase(Seqlist *pSep, size_t pos)
{
assert(pSep);
int i = 0;
if (pSep->size+1 <= pos)
{
printf("输入位置不对!");
return;
}
else
{
for (i = pos; i <= pSep->size-1; i++)
{
pSep->arr[i-1] = pSep->arr[i];
}
}
pSep->size--;
}
int Remove(Seqlist *pSep, DataType x)
{
assert(pSep);
int i = 0;
int j = 0;
if (pSep->size <= 0)
{
printf("没有数据!");
return;
}
else
{
for (i = 0; i <= pSep->size; i++)
{
if (pSep->arr[i] == x)
{
for (j = i; j <= pSep->size - 1; j++)
{
pSep->arr[j - 1] = pSep->arr[j];
}
pSep->size--;
return;
}
}
}
return 0;
}
void RemovAll(Seqlist *pSep, DataType x)
{
assert(pSep);
int i = 0;
int j = 0;
//int count = 0;
if (pSep->size <= 0)
{
printf("没有数据!");
return;
}
else
{
for (i = 0; i < pSep->size; i++)
{
if (pSep->arr[i] == x)
{
for (j = i; j <pSep->size; j++)
{
pSep->arr[j] = pSep->arr[j+1];
} 
pSep->size--;
i--;
} 
}
}
}
void SelectSort(Seqlist *pSep)//一次选出最大最小的数放在两段
{
assert(pSep);  
int Min = 0;
int Max = 0;
int i = 0;
int j = 0;
int flag = pSep->size;
if (pSep->size <= 0)
{
printf("没有数据!");
return;
}
else
{
for (i = 0; i< flag; i++)
{
Min = pSep->arr[i];
Max = pSep->arr[i];
for (j = i; j<flag; j++)
{
if (pSep->arr[j]>Max)
{
Max = pSep->arr[j];
}
if (pSep->arr[j] < Min)
{
Min = pSep->arr[j];
}
}
pSep->arr[i] = Max;
pSep->arr[pSep->size - i-1] = Min;
flag--;
}
}
}
int BinarySearch(Seqlist *pSep, DataType x)
{
assert(pSep);
int left = 0;
int right = pSep->size-1;
while (left <=right)
{
int mid =left+(right-left)/2;
if (x > pSep->arr[mid])
{
left = mid + 1;
}
else if (x < pSep->arr[mid])
{
right = mid -1;
}
else
{
printf("%d", pSep->arr[mid]);
return 0;
}
}
return -1;
}
int main()
{
Seqlist Test;
InitSeqList(&Test); 
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushFront(&Test);
//PushFront(&Test);
//PushFront(&Test);
//PushFront(&Test);
//PushFront(&Test);
//PopFront(&Test);
//PopFront(&Test);
//PopFront(&Test);
//PopFront(&Test);
//PopFront(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//Find(&Test, 2, 3);
//PrintSeqList(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//Erase(&Test, 1);
//PrintSeqList(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//Remove(&Test, 2);
//PrintSeqList(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//PushBack(&Test);
//RemovAll(&Test, 2);
//PrintSeqList(&Test);
//
PushBack(&Test);
PushBack(&Test);
PushBack(&Test);
PushBack(&Test);
PushBack(&Test);
BinarySearch(&Test,3);
PrintSeqList(&Test);
system("pause");
return 0;
}
时间: 2025-01-02 02:46:04

c语言实现线性表的相关文章

使用C语言实现线性表

线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结构体或对象.例如:1,2,3,4,5是一个线性表,A,B,C,D...Z是一个线性表,一列列车的车厢1,车厢2...车厢n是一个线性表. 线性表的机内表示法(又称存储结构)有2种,一种是顺序存储结构,另一种是链式存储结构. 顺序存储结构,顾名思义就是按顺序来存储的一种存储结构,比如线性表(1,2,3,4,5),共计5个元素,每个int型的数据元素假设占用

学习使用C语言实现线性表

线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结 构体或对象.例如:1,2,3,4,5是一个线性表,A,B,C,D...Z是一个线性表,一列列车的车厢1,车厢2...车厢n是一个线性表. 线性表的机内表示法(又称存储结构)有2种,一种是顺序存储结构,另一种是链式存储结构. 顺序存储结构,顾名思义就是按顺序来存储的一种存储结构,比如线性表(1,2,3,4,5),共计5个元素, 每个int型的数据元素假设

纯C语言实现线性表

1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXSIZE 100 4 5 typedef int ElemType; 6 7 typedef struct{ 8 ElemType data[MAXSIZE]; 9 int length; 10 }SqList; 11 12 SqList *InitList(SqList *L);//初始化 13 void DestroyList(SqList *L);//销毁 14 v

C语言数据结构 线性表的基本功能实现

头文件如下 #ifndef _SEQLIST_H_ #define _SEQLIST_H_ // 顺序表的动态存储 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef int SLDataType; typedef struct SeqList { SLDataType* array; // 指向动态开辟的数组 size_t size; // 有效数据个数 size_t capacity;

c语言线性表

c语言的线性表,还没有完善 1 #include<stdio.h> 2 #define MAXSIZE 100 //初始空间分配量 3 #define OK 1 4 #define ERROR 0 5 #define TRUE 1 6 #define FALSE 1 7 typedef int ElemType; //类型为int 8 typedef int Status;//函数的返回类型,此处为int 9 typedef struct 10 { 11 ElemType data[MAXSI

数据结构之线性表

线性表是最简单最常用的一种数据结构,在生活中各个方面都有应用. 线性表的定义:线性表大多数情况下是除了第一个位置的数据元素只存在后继元素,最后一个位置的数据元素只存在前驱元素外,所有数据元素都存在前驱和后继的一个有限序列.举个简单的例子就是:字母表中除了 a 只存在后继 b,z 只存在前驱 y之外,剩余的所有字母全部都有前驱和后继.为什么是大多数情况下,是因为线性表的链式存储结构中除了单向链表,还有循环链表和双向链表. 线性表的存储结构:顺序存储(数组实现,需要预先分配连续的内存空间)和链式存储

基于线性表的功能函数大全

顺序表 一:线性表的存储结构 顺序表的顺序存储是指一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构中相邻的元素存储在连续的物理存储单元中.采用顺序存储结构存储的线性表通常简称顺序表,可将顺序表归纳为:关系线性化,结点顺序存. 用C语言定义线性表的顺序存储表示 #define MAXSIZE 100 Typedef struct { ElemType elem[MAXSIZE]; int last; } 二:线性表顺序存储结构上的基本运算 (1)查找操作 查找可采用顺序查找

数据结构线性表初接触1:线性表的顺序存储结构下基本运算的实现

刚刚接触数据结构这学问,通过听课看书后自行练习了用C语言实现线性表的基本运算,其中有许多点值得注意.这里存储各个功能分块的代码,以便自身的理解及以后的复习: 1 typedef int ElemType; 2 #define MaxSize 50 3 typedef struct { 4 ElemType data[MaxSize]; 5 int length; 6 }SqList; 7 void CreateList(SqList *&L,ElemType a[],int n){ 8 int

Java语言描述顺序表类,顺序表类的基本操作实现

数据结构(Java版)ch2 线性表的顺序存储(顺序表) 线性表的抽象数据Java接口描述如下: package ch2; /** * 线性表的抽象数据接口,用Java语言描述线性表的这些功能! * @author 房廷飞 * */ public interface IList { public void clear(); //将线型表置成空表 public boolean isEmpty(); //判断是不是空表 public int length(); //返回线性表的长度 public O