码迷,mamicode.com
首页 > 编程语言 > 详细

c语言实现线性表

时间:2016-03-17 19:38:42      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:线性表   顺序表   

#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;
}

c语言实现线性表

标签:线性表   顺序表   

原文地址:http://10725723.blog.51cto.com/10715723/1752291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!