#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MAX 100
typedef int DataType;
typedef struct Seqlist
{
DataType Data[MAX];
DataType sz;
}Seqlist, *pSeqlist;
void PrintSeqlist(pSeqlist pSeq); //打印顺序表
void InitSeqlist(pSeqlist pSeq); //初始化顺序表
void PushBack(pSeqlist pSeq, DataType x); //从后面插入一个元素
void Popback(pSeqlist pSeq); //抛出最后面的
void PushFornt(pSeqlist pSeq, DataType x);//在头部插入一个元素
void PopFornt(pSeqlist pSeq); //删除头元素
void Insert(pSeqlist pSeq, int pos, DataType x);//指定位置插入
void Remove(pSeqlist pSeq, DataType x); //移除第一个出现的x
void RemoveAll(pSeqlist pSeq, DataType x);//移除全部的x
void Sort(pSeqlist pSeq); //排序顺序表
int BinarySearch(pSeqlist pSeq, DataType x);//二分查找,返回元素所在下标
#endif //__SEQLIST_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include"seqlist.h"
void PrintSeqlist(pSeqlist pSeq)
{
assert(pSeq);
int i = 0;
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表是空表/n");
}
else
{
for (i = 0; i < pSeq->sz; i++)
{
printf("%d ", pSeq->Data[i]);
}
printf("/n");
}
}
void InitSeqlist(pSeqlist pSeq)
{
assert(pSeq);
pSeq->sz = 0;
}
void PushBack(pSeqlist pSeq, DataType x)
{
assert(pSeq);
if (pSeq->sz == MAX) //异常情况,表为满
{
printf("表已满/n");
return;
}
pSeq->Data[pSeq->sz] = x;
pSeq->sz++;
}
void Popback(pSeqlist pSeq)
{
assert(pSeq);
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return;
}
pSeq->sz--;
}
void PushFornt(pSeqlist pSeq, DataType x)
{
assert(pSeq);
int i = 0;
if (pSeq->sz == MAX) //异常情况,表为满
{
printf("表已满/n");
return;
}
for (i = pSeq->sz; i > 0; i--)
{
pSeq->Data[i] = pSeq->Data[i - 1];
}
pSeq->Data[0] = x;
pSeq->sz++;
}
void PopFornt(pSeqlist pSeq)
{
assert(pSeq);
int i = 0;
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return;
}
for (i = 0; i< pSeq->sz - 1; i++)
{
pSeq->Data[i] = pSeq->Data[i + 1];
}
pSeq->sz--;
}
void Insert(pSeqlist pSeq, int pos, DataType x)
{
assert(pSeq);
int i = 0;
if (pSeq->sz == MAX) //异常情况,表为满
{
printf("表已满/n");
return;
}
if (pos > pSeq->sz&&pos<0) //插入位置小于0或者大于sz都是不合法,顺序表要求位置连续
{
printf("插入位置不合法/n");
return;
}
for (i = pSeq->sz; i>pos; i--)
{
pSeq->Data[i] = pSeq->Data[i - 1];
}
pSeq->Data[pos] = x;
pSeq->sz++;
}
void Remove(pSeqlist pSeq, DataType x)
{
assert(pSeq);
int i = 0;
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return;
}
while (i<pSeq->sz)
{
if (pSeq->Data[i] == x)
{
for (; i< pSeq->sz - 1; i++)
{
pSeq->Data[i] = pSeq->Data[i + 1];
}
pSeq->sz--;
break;
}
i++;
}
}
void RemoveAll(pSeqlist pSeq, DataType x)
{
assert(pSeq);
int i = 0;
int j = 0;
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return;
}
while (i <= pSeq->sz)
{
if (pSeq->Data[i] == x)
{
for (j = i; j< pSeq->sz - 1; j++)
{
pSeq->Data[j] = pSeq->Data[j + 1];
}
pSeq->sz--;
}
i++;
}
}
void Sort(pSeqlist pSeq)
{
assert(pSeq);
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return;
}
int i = 0;
int j = 0;
int flag = 0;
for (i = 0; i < pSeq->sz - 1; i++)
{
flag = 0;
for (j = 0; j < pSeq->sz - i - 1; j++)
{
if (pSeq->Data[j]>pSeq->Data[j + 1])
{
DataType tmp = pSeq->Data[j];
pSeq->Data[j] = pSeq->Data[j + 1];
pSeq->Data[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0)
break;
}
}
int BinarySearch(pSeqlist pSeq, DataType x)
{
assert(pSeq);
if (pSeq->sz == 0) //异常情况,表为空
{
printf("表已空/n");
return -1;
}
int left = 0;
int right = pSeq->sz - 1;
int mid = (left&right) + ((left^right) >> 1); //mid取平均值
while (left<right)
{
if (x>pSeq->Data[mid])
{
left = mid + 1;
mid = (left&right) + ((left^right) >> 1);
}
else if (x<pSeq->Data[mid])
{
right = mid - 1;
mid = (left&right) + ((left^right) >> 1);
}
else
{
printf("%d/n", mid);
return mid; //返回这个元素所在的下标
}
}
return -1;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include"seqlist.h"
void menu()
{
printf("*********************************/n");
printf("0.exit 1.PrintSeqlist /n");
printf("2.InitSeqlist 3.PushBack /n");
printf("4.Popback 5.PushFornt /n");
printf("6.PopFornt 7.Insert /n");
printf("8.Remove 9.RemoveAll /n");
printf("10.Sort 11.BinarySearch/n");
printf("请输入:>");
}
void test(pSeqlist pSeq)
{
DataType x = 0;
int n = 0;
int pos = 0;
while (1)
{
menu();
scanf("%d", &n);
switch (n)
{
case 0:
exit(1);
break;
case 1:
PrintSeqlist(pSeq);
break;
case 2:
InitSeqlist(pSeq);
break;
case 3:
printf("请输入元素/n");
scanf("%d", &x);
PushBack(pSeq, x);
break;
case 4:
Popback(pSeq);
break;
case 5:
printf("请输入元素/n");
scanf("%d", &x);
PushFornt(pSeq, x);
break;
case 6:
PopFornt(pSeq);
break;
case 7:
printf("请输入元素/n");
scanf("%d", &x);
printf("请输入插入位置/n");
scanf("%d", &pos);
Insert(pSeq, pos, x);
break;
case 8:
printf("请输入元素/n");
scanf("%d", &x);
Remove(pSeq, x);
break;
case 9:
printf("请输入元素/n");
scanf("%d", &x);
RemoveAll(pSeq, x);
break;
case 10:
Sort(pSeq);
break;
case 11:
printf("请输入元素/n");
scanf("%d", &x);
BinarySearch(pSeq, x);
break;
default:
printf("输入无效/n");
break;
}
}
}
int main()
{
Seqlist pSeq;
memset(pSeq.Data, 0, sizeof(DataType)*MAX);
pSeq.sz = 0;
test(&pSeq);
system("pause");
return 0;
}
【不足】
反馈信息做得不够好
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/18198.html