头文件 SqList.h
#define SEQLIST_INIT_SIZE 8
#define _CRT_SECURE_NO_WARNINGS
#include
#include
typedef int ElemType;
typedef struct SeqList
{
ElemType *base;//存储空间基址
int capacity;
int size;//真实数据大小
}SeqList;
void InitSeqList(SeqList *list);//初始化顺序表
void push_back(SeqList *list,ElemType x);//尾插
void push_front(SeqList *list, ElemType x);//头插
void show_list(SeqList *list);//显示结果
void pop_back(SeqList *list);//后删
void pop_front(SeqList*list);//头删
void insert_pos(SeqList*list,ElemType x,ElemType e);//指定位置插入元素
ElemType find(SeqList *list,ElemType x);//查询指定元素
ElemType length(SeqList *list);//查询表长
源文件SeqList.c(函数具体实现)
#include"SeqList.h"
#define _CRT_SECURE_NO_WARNINGS
void InitSeqList(SeqList *list) {
list->base = (ElemType*)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);
assert(list->base != NULL);
list->capacity = SEQLIST_INIT_SIZE;
list->size = 0;
}
void push_back(SeqList *list, ElemType x) {//尾插
if (list->size > list->capacity)
printf("空间已满,无法实现尾插!\n");
else
{
list->base[list->size] = x;
list->size++;
}
}
void push_front(SeqList *list, ElemType x) {//头插
if (list->size > list->capacity)
printf("空间已满,无法实现尾插!\n");
else
{
for (int i = list->size; i > 0; i--)
{
list->base[i] = list->base[i - 1];
}
list->base[0] = x;
list->size++;
}
}
void show_list(SeqList *list) {//显示结果
int i = 0;
for (i = 0; i < list->size; i++)
{
printf("%d ", list->base[i]);
}
}
void pop_back(SeqList *list) {//后删
if (list->size == 0)
printf("表已空,无法删除\n");
else
{
list->size--;
}
}
void pop_front(SeqList *list) {//头删
if (list->size == 0)
printf("表已空,无法删除\n");
else
{
for (int i = 0; i < list->size; i++) {
list->base[i] = list->base[i + 1];
}
list->size--;
}
}
void insert_pos(SeqList*list, ElemType x,ElemType e) {//指定位置插入元素
if (list->size > list->capacity||x<0) {
printf("空间已满,无法实现尾插!\n");
}
else {
for (int i = list->size; i >= x; i--)
{
list->base[i + 1] = list->base[i];
}
list->base[x] = e;
list->size++;
}
}
ElemType find(SeqList *list,ElemType x) {
for (int i = 0; i < list->size; i++) {
if (x == list->base[i]) {
return i;
}
}
return -1;
}
ElemType length(SeqList *list) {
return list->size;
}
源文件Main.c(测试函数)
#include"SeqList.h"
#include
#define _CRT_SECURE_NO_WARNINGS
int main() {
SeqList mylist;
InitSeqList(&mylist);
ElemType elem = 0, pos = 0;
int select = 1;
while (select) {
printf("\n**************************************\n");
printf("*[1] push_back [2] push_front*\n");
printf("*[3] show_list [4] pop_back*\n" );
printf("*[5] pop_front [6] insert_pos*\n");
printf("*[7] find [8] length*\n" );
printf("*[9] delete_pos [10]delete_val*\n");
printf("*[11] sort [12] resver*\n" );
printf("*[13] clear [14]destory*\n" );
printf("*[0] quit_system\n ");
printf("\n**************************************\n");
printf("请选择你要进行的 *** 作>\n");
scanf("%d", &select);
if (select == 0)
break;
switch (select) {
case 1:
printf("请输入要插入的数据(-1)结束:\n");
while (scanf("%d", &elem), elem != -1)
push_back(&mylist, elem);
break;
case 2:
printf("请输入要插入的数据(-1)结束:\n");
while (scanf("%d", &elem), elem != -1)
push_front(&mylist, elem);
break;
case 3:
printf("结果如下:\n");
show_list(&mylist);
break;
case 4:
pop_back(&mylist);
break;
case 5:
pop_front(&mylist);
break;
case 6:
printf("请选择要插入的下标和元素:\n");
scanf("%d%d", &pos,&elem);
insert_pos(&mylist,pos,elem);
break;
case 7:
printf("请输入你要查询的元素:\n");
scanf("%d", &elem);
pos=find(&mylist, elem);
if (pos == -1)
printf("查找的%d不在顺序表中!\n", elem);
else
printf("查找的%d在顺序表中的下标为%d\n", elem,pos);
case 8:
printf("顺序表的长度为%d",length(&mylist));
break;
default :
printf("输入数据有误,请重新输入\n");
break;
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)