用C语言实现顺序表的一些基本操作:前插、后插、前删、后删、查找等一些基本操作。
Seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include
#include
#include
#include
#define MAX 100
typedef int DataType;
typedef struct Seqlist
{
DataType arr[MAX];
int count;
}Seqlist, *pSeqlist;
void InitSeqlist(pSeqlist p);
void PushBack(pSeqlist p, DataType d);
void PushFront(pSeqlist p, DataType d);
void PopBack(pSeqlist p);
void PopFront(pSeqlist p);
DataType* Search(pSeqlist p, DataType d);
void Remove(pSeqlist p, DataType d);
void RemoveAll(pSeqlist p, DataType d);
void Sort(pSeqlist);
DataType BinarySearch(pSeqlist p, DataType d);
void Show(pSeqlist p);
#endif
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Seqlist.h"
void menu()
{
printf("*****************************************\n");
printf("******** 1.PushBack 2.PushFront *******\n");
printf("******** 3.PopBack 4.PopFront *******\n");
printf("******** 5.Search 6.Remove *******\n");
printf("******** 7.RemoveAll 8.Sort *******\n");
printf("******** 9.Binary 10.show *******\n");
printf("******** 0.exit *******\n");
printf("*****************************************\n");
}
int main()
{
int input = 0;
Seqlist mylist;
InitSeqlist(&mylist);
do
{
menu();
DataType data = 0;
printf("请输入您的选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入要插入的元素:");
scanf("%d", &data);
PushBack(&mylist,data);
break;
case 2:
printf("请输入要插入的元素:");
scanf("%d", &data);
PushFront(&mylist, data);
break;
case 3:
PopBack(&mylist);
break;
case 4:
PopFront(&mylist);
break;
case 5:
{
DataType* pret = NULL;
printf("请输入需要查找的元素:");
scanf("%d", &data);
pret= Search(&mylist, data);
if (pret!=NULL)
printf("%d\n", *pret);
}
break;
case 6:
printf("请输入需要删除的元素:");
scanf("%d", &data);
Remove(&mylist, data);
break;
case 7:
printf("请输入需要删除的元素:");
scanf("%d", &data);
RemoveAll(&mylist, data);
break;
case 8:
Sort(&mylist);
break;
case 9:
{
DataType ret = 0;
printf("请输入需要查找的元素:");
scanf("%d", &data);
ret = BinarySearch(&mylist, data);
printf("%d\n", ret);
}
break;
case 10:
Show(&mylist);
break;
case 0:
exit;
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
Seqlist.c
#include "Seqlist.h"
void InitSeqlist(pSeqlist p)
{
p->count = 0;
memset(p->arr,0,sizeof(DataType)*MAX);
}
void PushBack(pSeqlist p, DataType d)
{
assert(p != NULL);
if (MAX == NULL)
{
printf("顺序表已满\n");
return;
}
p->arr[p->count] = d;
p->count++;
}
void PushFront(pSeqlist p, DataType d)
{
int i = 0;
assert(p != NULL);
if (MAX == NULL)
{
printf("顺序表已满\n");
return;
}
for (i = p->count; i > 0; i--)
{
p->arr[i] = p->arr[i-1];
}
p->arr[0] = d;
p->count++;
}
void PopBack(pSeqlist p)
{
assert(p != NULL);
if (p->count==0)
{
printf("该顺序表为空");
return;
}
p->count--;
}
void PopFront(pSeqlist p)
{
int i = 0;
assert(p != NULL);
if (p->count == NULL)
{
printf("该顺序表为空\n");
return;
}
for (i = 0; i < p->count - 1;i++)
{
p->arr[i] = p->arr[i+1];
}
p->count--;
}
DataType* Search(pSeqlist p, DataType d)
{
int i = 0;
assert(p != NULL);
for (i = 0; i < p->count; i++)
{
if (p->arr[i] == d)
{
printf("找到了.\n");
return p->arr+i;
}
}
printf("没找到\n");
return NULL;
}
//DataType* Find(pSeqlist p, DataType d)
//{
// int i = 0;
// assert(p != NULL);
// for (i = 0; i < p->count; i++)
// {
// if (p->arr[i] == d)
// {
// printf("找到了\n");
// return p->arr + i;
//
// }
// }
// return NULL;
//}
void Remove(pSeqlist p, DataType d)
{
int i = 0;
int j = 0;
assert(p != NULL);
if (p->count == NULL)
{
printf("该顺序表为空\n");
return;
}
for (i = 0; i < p->count; i++)
{
if (p->arr[i] == d)
{
for (j = i; j < p->count; j++)
{
p->arr[j] = p->arr[j + 1];
}
break;
}
}
p->count--;
}
void RemoveAll(pSeqlist p, DataType d)
{
int i = 0;
int j = 0;
assert(p != 0);
if (p->count == NULL)
{
printf("该顺序表为空\n");
return;
}
for (i = 0; i < p->count; i++)
{
if (p->arr[i] == d)
{
for (j = i; j < p->count; j++)
{
p->arr[j] = p->arr[j + 1];
}
}
p->count--;
}
}
void Sort(pSeqlist p)
{
int i = 0;
int j = 0;
for(i = 0; i < p->count; i++)
{
for (j = 0; jcount - i - 1; j++)
{
if (p->arr[j]>p->arr[j + 1])
{
DataType tmp = p->arr[j];
p->arr[j] = p->arr[j + 1];
p->arr[j + 1] = tmp;
}
}
}
}
DataType BinarySearch(pSeqlist p, DataType d)
{
int left = 0;
int right = p->count - 1;
assert(p != NULL);
while (left <= right)
{
int mid = left - ((left - right) >> 1);
if (p->arr[mid] > d)
{
right = mid - 1;
}
else if (p->arr[mid]count; i++)
{
printf("%d ", p->arr[i]);
}
printf("\n");
}
本文介绍了一个使用C语言实现的顺序表数据结构及其基本操作,包括前插、后插、前删、后删和查找等功能,并提供了一个交互式菜单来演示这些操作。
4512

被折叠的 条评论
为什么被折叠?



