#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 60
typedef int Item;
typedef struct node {
Item data[MAXLEN];
int last;
}Node;
Node *first = NULL; //初始化链表头指针
static void terminate(const char *message)
{
printf("%s\n", message);
exit(EXIT_FAILURE);
}
Node *createlist()
{
first = (Node *)malloc(sizeof(Node));
first->last = -1; //初始化顺序表为空
return first;
}
void insert(Node *first, Item x)
{
int j;
if (first->last == MAXLEN - 1)
terminate("顺序表已满!");
j = first->last;
first->data[j+1] = x;
first->last++;
}
void delete_node(Node *first, Item x)
{
int j;
for (j = 0; first->data[j] != x; j++);
if (j > first->last)
terminate("值不存在!");
while (j <= first->last) {
first->data[j] = first->data[j + 1];
j++;
}
first->last--;
}
int search(Node *first, Item x)
{
int i = 0;
while (i <= first->last&&first->data[i] != x)
i++;
if (i > first->last)
{
terminate("查找的值不存在");
return -1;
}
else
return i; //返回值在顺序表中的位置
}
void print_list(Node *first)
{
int j = 0;
for (; j <= first->last; j++)
{
printf("值为:%d 位置为:%d\n", first->data[j],j+1);
}
}
测试函数:
int main(void)
{
Node *first;
first = createlist();
insert(first,1);
insert(first,2);
insert(first, 3);
insert(first, 4);
print_list(first);
delete_node(first, 3);
printf("\n");
print_list(first);
getchar();
return 0;
}
运行结果:
缺点:对于相同数值的结点,仅能删除前一个,之后的会忽略。
改进的话,建议结合结点的位置进行删除,更准确。
线性表的链式存储可参考:https://blog.youkuaiyun.com/az9996/article/details/85407539