数据结构 / 顺序表操作 / 顺序表尾部删除
1.实现逻辑
只需要把顺序表的长度减1。
2.顺序表尾部删除函数代码
/*
*顺序表尾部删除
* */
int delete_tail(sqlist *list)
{
if(NULL==list || 1==is_list_empty(list))
{
return -1;
}
list->len--;
return 0;
}
3. 完整代码
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 20
typedef int data_type;
typedef struct SQLIST
{
//数据元素
data_type arr[MAXSIZE];
int len;
}sqlist;
sqlist *create();
int append(sqlist *list, data_type element);
int is_list_full(sqlist *list);
int is_list_empty(sqlist *list);
void output(sqlist *list);
int delete_tail(sqlist *list);
int main(int argc, const char *argv[])
{
data_type element;
int n;
puts("> ---create a sqlist---\n");
sqlist *list=create();
if(NULL==list)
{
printf("\tfailed to create sqlist!\n");
return -1;
}
printf("\ta sqlist has been created!\n");
putchar(10);
puts("> ---append elements to list---\n");
printf("\thow many element do you want to append?(max:%d):", MAXSIZE);
scanf("%d", &n);
for(int i=0; i<n; i++)
{
printf("\tplease input No.%d element:", i+1);
scanf("%d", &element);
int ret=append(list, element);
if(0==ret)
{
printf("\tlist: len=%d / max=%d!\n", list->len, MAXSIZE);
}
else
{
printf("\tfailed to append element!\n");
break;
}
putchar(10);
}
puts("> ---output list by traversing---\n");
output(list);
putchar(10);
puts("> --- delete tail element---");
int ret = delete_tail(list);
output(list);
putchar(10);
return 0;
}
/*
*申请成功返回堆区内存首地址
*失败返回NULL
* */
sqlist *create()
{
sqlist* list=(sqlist*)malloc(sizeof(sqlist));
if(NULL==list)
{
return NULL;
}
//顺序表长度清零
list->len=0;
//顺序表数据元素清零
memset(list->arr, 0, sizeof(list->arr));
return list;
}
/*
*满了返回1
*不满返回0
* */
int is_list_full(sqlist *list)
{
return list->len==MAXSIZE ? 1 : 0;
}
/*
*注意要判断顺序表是否已满
*成功返回0
*失败返回-1
* */
int append(sqlist *list, data_type element)
{
if(NULL==list || 1==is_list_full(list))
{
return -1;
}
list->arr[list->len++]=element;
return 0;
}
/*
*判断顺序表是否为空
* */
int is_list_empty(sqlist *list)
{
return list->len == 0 ? 1 : 0;
}
/*
*顺序表遍历
*
* */
void output(sqlist *list)
{
if(NULL==list||1==is_list_empty(list))
{
printf("list is NULL!\n");
return;
}
for(int i=0; i<list->len; i++)
{
printf("%d\t", list->arr[i]);
}
putchar(10);
}
/*
*顺序表尾部删除
* */
int delete_tail(sqlist *list)
{
if(NULL==list || 1==is_list_empty(list))
{
return -1;
}
list->len--;
return 0;
}