[C++] 纯文本查看 复制代码#include
#include
typedef char elemtype;
typedef struct _Node
{
elemtype data;
_Node *next;
} Node, *List;
// (1)初始化顺序表L
Node *initList();
// (2)依次插入a、b、c、d、e
bool insertNode(List &L, elemtype data, int i);
// (3)输出顺序表L
void printList(List L);
// (4)输出顺序表L的长度
int length(List L);
// (5)判断顺序表L是否为空
bool isEmpty(List L);
// (6)输出顺序表的第3个元素
// (7)输出元素a的逻辑位置
bool getElem(List L, int i, elemtype &e);
// (10)删除L的第3个元素
bool getLogicElem(List L, elemtype e, int &i);
bool delElem(List L, int i);
// (12)释放顺序表L
bool destroyList(List L);
int main()
{
// (1)初始化顺序表L
// List L = initList();
List L = (Node *)malloc(sizeof(Node));
// (2)依次插入a、b、c、d、e
char datalist[5] = {'a', 'b', 'c', 'd', 'e'};
for (int i = 0; i < 5; i++)
{
char *t = &datalist[i];
printf("%c", *t);
insertNode(L, datalist[i], i + 1);
}
// (3)输出顺序表L
printList(L);
// (4)输出顺序表L的长度
printf("length of List L is %d", length(L));
// (5)判断顺序表L是否为空
// char *str = isEmpty(L) ? "empty" : "no empty";
if (isEmpty(L))
printf("List L is empty");
else
printf("List L is no empty");
// (6)输出顺序表的第3个元素
char e = getElem(L, 3, e);
printf("%c\n", e);
// (7)输出元素a的逻辑位置
int i = 0;
getLogicElem(L, 'a', i);
printf("a in the %d", i);
// (8)在第4个元素位置上插入元素f
insertNode(L, 'f', 4);
//(9)输出顺序表L
printList(L);
// (10)删除L的第3个元素
delElem(L, 3);
// (11)输出顺序表L
printList(L);
// (12)释放顺序表L
destroyList(L);
return 0;
}
Node *initList()
{
return (Node *)malloc(sizeof(Node));
}
bool insertNode(List &L, elemtype data, int i)
{ //创建节点
Node *t = (Node *)malloc(sizeof(Node));
t->data = data;
t->next = NULL;
// if (i < 1 || i > length(L))
if (i < 1)
return false;
else
{
//定位到目标节点前一个
Node *p = L->next;
// int j = 1;
// for (; j < i - 1; j++, p = p->next)
// ;
int j = 0;
for (; j < i - 1; j++, p = p->next)
;
//插入节点
t->next = p->next;
p->next = t;
return true;
}
}
void printList(List L)
{
if (L->next == NULL)
{
printf("List is empty\n");
}
else
{
Node *p = L->next;
while (p)
{
printf("%c ", p->data);
p = p->next;
}
}
}
int length(List L)
{
if (L->next == NULL)
{
return 0;
}
else
{
int i = 0;
Node *p = L->next;
// for (; p != NULL; i++)
// {
// p = p->next;
// }
while (p->next != NULL)
while (p != NULL)
{
i++;
p = p->next;
}
return i;
}
}
bool isEmpty(List L)
{
if (L->next)
return false;
else
return true;
}
bool getElem(List L, int i, elemtype &e)
{
if (i < 1 || i > length(L))
return false;
else
{
Node *p = L->next;
for (int j = 1; j <= i; j++, p = p->next)
;
e = p->data;
return true;
}
}
//根据元素值找元素位置
bool getLogicElem(List L, elemtype e, int &i)
{
if (L->next == NULL)
{
i = 0;
return false;
}
else
{
Node *p = L->next;
int j = 0;
for (; p->data != e; j++, p = p->next)
;
i = j;
return true;
}
}
bool delElem(List L, int i)
{
if (i < 0 || i > length(L))
return false;
else
{
Node *p = L->next;
//定位到目标元素的前一个位置
int j = 1;
for (; j < i - 1; j++, p = p->next)
;
Node *t = p->next;
p->next = t->next;
free(t);
return true;
}
}
bool destroyList(List L)
{
if (!(L->next))
return false;
else
{
Node *p = L->next;
Node *t = L->next;
while (p)
{
t = p;
p = p->next;
free(t);
}
return true;
}
}