SeqList.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include "stdio.h"
#include "malloc.h"
#include "assert.h"
#define SEQLIST_INIT_SIZE 8
typedef int ElemType;
typedef struct SeqList
{
ElemType *base;
int capacity; //容量
int size; //大小
}SeqList;
void InitSeqList(SeqList *list);
void push_back(SeqList *List, ElemType);
void push_front(SeqList *List, ElemType);
void show_list(SeqList*List);
void pop_back(SeqList * List);
void pop_front(SeqList *List);
void insert_pos(SeqList* List, int, ElemType);
int find(SeqList *List, ElemType);
int length(SeqList *List);
void delete_pos(SeqList*List, int pos);
void delete_val(SeqList*List, ElemType x);
void sort(SeqList*List);
void resver(SeqList *List);
void clear(SeqList *List);
void destroy(SeqList* List);
#endif // !_SEQLIST_H_
SeqList.c
#include "SeqList.h"
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_s("顺序表空间已满,不能插入数据\n");
return;
}
List->base[List->size] = x;
List->size++;
}
void push_front(SeqList *List, ElemType x)
{
if (List->size>=List->capacity)
{
printf_s("顺序表空间已满,不能插入数据\n");
return;
}
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 )
{
for (int i = 0; i < List->size;i++)
{
printf_s("%d ", List->base[i]);
}
printf_s("\n");
}
void pop_back(SeqList * List)
{
if (List->size ==0)
{
printf_s("顺序表为空,不能删除数据\n");
return;
}
List->size--;
}
void pop_front(SeqList *List)
{
if (List->size == 0)
{
printf_s("顺序表为空,不能删除数据\n");
return;
}
for (int i = 0; i < List->size-1;i++)
{
List->base[i] = List->base[i + 1];
}
List->size--;
}
void insert_pos(SeqList* List, int pos, ElemType x)
{
if (pos<0||pos>List->size)
{
printf_s("插入数据的位置非法,不能插入数据\n");
return;
}
for (int i = List->size; i > pos;i--)
{
List->base[i] = List->base[i - 1];
}
List->base[pos] = x;
List->size++;
}
int find(SeqList *List, ElemType key)
{
for (int i= 0; i < List->size;i++)
{
if (List->base[i]==key)
{
return i;
}
}
return -1;
}
int length(SeqList *List)
{
return List->size;
}
void delete_pos(SeqList*List, int pos)
{
if (pos<0||pos>=List->size)
{
printf_s("删除数据的位置非法,不能删除");
}
for (int i = pos; i < List->size - 1;i++)
{
List->base[i] = List->base[i + 1];
}
List->size--;
}
void delete_val(SeqList*List, ElemType x)
{
int pos = find(List, x);
if (pos=-1)
{
printf_s("表中没有该数据");
}
delete_pos(List, pos);
}
void sort(SeqList*List)
{
for (int i= 0; i<List->size - 1;i++)
{
for (int j = 0; j < List->size - 1 - i; j++)
{
if (List->base[j]>List->base[j+1])
{
ElemType tmp = List->base[j];
List->base[j] = List->base[j + 1];
List->base[j + 1] = tmp;
}
}
}
}
void resver(SeqList *List)
{
if (List->size == 0 || List->size == 1)
{
return;
}
int low = 0;
int high = List->size - 1;
ElemType tmp;
while (low<high)
{
tmp = List->base[high];
List->base[high] = List->base[low];
List->base[low] = tmp;
high--;
low++;
}
}
void clear(SeqList *List)
{
List->size = 0;
}
void destroy(SeqList* List)
{
free(List->base);
List->base = NULL;
List->capacity = 0;
List->size = 0;
}
#include "SeqList.h"
#include <iostream>
int main()
{
SeqList mylist;
InitSeqList(&mylist);
ElemType Item;
int pos;
int select = 1;
while (select)
{
printf_s("**************************************\n");
printf_s("* [1] push_back [2] push_fornt *\n");
printf_s("* [3] show_list [4] pop_back *\n");
printf_s("* [5] pop_fornt [6] insert_pos *\n");
printf_s("* [7] find [8] lenght *\n");
printf_s("* [9] delete_pos [10]pop_back *\n");
printf_s("* [11] sort [12] resver *\n");
printf_s("* [13] clear [14]destroy *\n");
printf_s("* [14] quit_system *\n");
printf_s("**************************************\n");
printf_s("请选择:>");
scanf_s("%d", &select);
if (select==0)
{
break;
}
switch (select)
{
case 1:
printf_s("请输入要插入的数据(-1结束):>");
while (scanf_s("%d", &Item),Item!=-1)
{
push_back(&mylist, Item);
}
break;
case 2:
printf_s("请输入要插入的数据(-1结束):>");
while (scanf_s("%d", &Item), Item != -1)
{
push_front(&mylist, Item);
}
break;
case 3:
show_list(&mylist);
break;
case 4:
pop_back(&mylist);
break;
case 5:
pop_front(&mylist);
break;
case 6:
printf_s("请输入要插入的数据:>");
scanf_s("%d", &Item);
printf_s("请输入要插入的位置:>");
scanf_s("%d", &pos);
insert_pos(&mylist, pos, Item);
break;
case 7:
printf_s("请输入要查找的数据:>");
scanf_s("%d", &Item);
pos = find(&mylist, Item);
if (pos==-1)
{
printf_s("未查到该数据:%d\n",Item);
}
else
{
printf_s("查找的数据在表中下标为 %d\n", pos);
}
break;
default:
printf_s("输入的选择错误,请重新输入\n");
break;
case 8:
printf_s("顺序表的长度为:>%d\n", length(&mylist));
break;
case 9:
printf_s("请输入要删除数据的位置:>");
scanf_s("%d", &pos);
delete_pos(&mylist,pos);
break;
case 10:
printf_s("请输入要删除的数据:>");
scanf_s("%d", &Item);
delete_val(&mylist, Item);
break;
case 11:
sort(&mylist);
break;
case 12:
resver(&mylist);
break;
case 13:
clear(&mylist);
break;
case 14:
destroy(&mylist);
break;
}
}
system("pause");
return 0;
}