#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int elemtype;
#define MAXSIZE 10
typedef int status;
typedef struct LNode {
elemtype data;
int* elem;
struct LNode* next;
int length;
int listsize;
int incrementsize;
}Sqlist, * LinkList;
void Print(Sqlist* L)
{
L->listsize = MAXSIZE;
L->incrementsize = LISTINCREMENT;
L->elem = (int*)malloc(sizeof(int) * L->listsize);
printf("请输入:");
L->length = 6;
for (int i = 0; i < L->length; i++)
{
scanf_s("%d ", &L->elem[i]);
}
}
//int orderSearch(int L[] , int length, int key) {
// 从前往后扫描list数组,如果有元素的值与key相等,直接返回其位置
//for (int i = 0; i < length; i++) {
//if (key == L[i]) {
// return i;
//}
//}
// 如果扫描完,说明没有元素的值匹配key,返回-1,表示查找失败
//return -1;
//}
void Printt(Sqlist* L) {
if (L->length == 0) {
printf("NULL\n");
}
for (int i = 0; i < L->length; i++) {
printf("%d ", L->elem[i]);
}
printf("\n\n");
}
int compare(elemtype e1, elemtype e2)
{
if (e1 == e2)
return 1;
else
return 0;
}
//查找操作
void locateelem_sq(Sqlist L, elemtype e, int (*compare)(elemtype, elemtype))
{
//在顺序线性表l中查找第一个与元素e满足compare()元素的位置(即返回第一个与e值相等的元素位置)。
//若存在,返回其在l中的次序。若不存在则返回0
int i, * p;
i = 1;
p = L.elem;//p为第一个元素的存储位置
while (i <= L.length && !(*compare)(*p++, e)) //比较函数不相等返回1,前面去反,不相等为0
i++;
if (i <= L.length)
printf ("Found!");
else printf("Not found!");
printf("\n");
}
//向顺序表第i个位置插入元素
void ListInsert(Sqlist &L,int i,elemtype e)
{
elemtype* newbase, * q,* p;
if (i<1 || i>L.length + 1)printf("错误");
if (L.length > L.listsize) {
newbase = (elemtype*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(elemtype));
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[4]);
for (p = &(L.elem[L.length - 1]); p >= q; --p)*(p + 1) = *p;
*q = 12;
++L.length;
printf("插入成功");
printf("\n");
}
void List_Sq(Sqlist& L, int i, elemtype &e)
{
elemtype* newbase, * q, * p;
p = &(L.elem[3]);
e = *p;
q = L.elem + L.length - 1;
for (++p; p <= q; ++p)*(p - 1) = *p;
--L.length;
printf("删除成功");
printf("\n");
}
int main()
{
Sqlist* L = new Sqlist;
int e = -1;
Print(L);
Printt(L);
elemtype b[] = { 1 ,- 9, 6, 10, 400, 30, 60 };
locateelem_sq(*L, 7, compare);
ListInsert(*L, 5, 12);
Printt(L);
List_Sq(*L, 4, e);
Printt(L);
}