前言
刷leetcode题目时发现需要先学习一下数据结构,那就开始干吧
1. 目标
printf("* [1] push_back [2] push_front *\n");
printf("* [3] show_list [4] pop_back *\n");
printf("* [5] pop_front [6] insert_pos *\n");
printf("* [7] find [8] length *\n");
printf("* [9] delete_pos [10] delete_val*\n");
printf("* [11] sort [12] resver *\n");
printf("* [13] clear [14] destroy *\n");
实现顺序表的这些功能
2. 初始化&&尾插&&显示表思路
2.1 初始化
问题一:顺序表是什么
答:用数组表示的线性结构。
问题二:通过什么数据类型定义顺序表
答:结构体
问题三:如何定义顺序表
答:应包含指向顺序表基地址的指针,当前表的长度,表的最大容量
问题四:如何初始化顺序表
答:分配一块内存给顺序表,指针指向基地址;当前长度为0;最大容量通过#define设置为常数
2.2 尾插
问题一:如何判断是否可以尾插
答:当前长度 < 最大容量时可以尾部插入
问题二:如何尾插
答: 将顺序表对应处赋值为插入值,当前长度+1
2.3 显示表
问题一:如何显示表
答:通过for循环将表的所有元素逐个显示
2. 代码
2.1 Sqlist.h
#ifndef _SQLIST_H_
#define _SQLIST_H_
#include <stdio.h>
#define SQLIST_INIT_SIZE 8
typedef int ElemType;
typedef struct Sqlist
{
ElemType *base;
int capcity;
int size;
}Sqlist;
//初始化
void InitSqlist(Sqlist *list);
//尾部插入
void push_back(Sqlist *list, ElemType x);
//显示顺序表
void show_list(Sqlist *list);
#endif
2.2 Sqlist.cpp
#include "Sqlist.h"
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
void InitSqlist(Sqlist *list)
{
list->base = (ElemType*)malloc(sizeof(ElemType)*SQLIST_INIT_SIZE);
assert(list->base != NULL);
list->capcity = SQLIST_INIT_SIZE;
list->size = 0;
}
void push_back(Sqlist *list, ElemType x)
{
//判断能否插入输入
if(list->size >= list->capcity)
{
printf("顺序表空间已满,不能尾部插入数据");
return;
}
list->base[list->size] = x;
list->size++;
}
void show_list(Sqlist *list)
{
for(int i = 0; i < list->size; i++)
{
printf("%d ", list->base[i]);
}
printf("\n");
}
2.3 main
#include "Sqlist.h"
#include <stdio.h>
int main()
{
Sqlist mylist;
InitSqlist(&mylist);
ElemType Item;
int select = 1;
while (select)
{
printf("*********************************\n");
printf("* [1] push_back [2] push_front *\n");
printf("* [3] show_list [4] pop_back *\n");
printf("* [5] pop_front [6] insert_pos *\n");
printf("* [7] find [8] length *\n");
printf("* [9] delete_pos [10] delete_val*\n");
printf("* [11] sort [12] resver *\n");
printf("* [13] clear [14] destroy *\n");
printf("* [0] quit *\n");
printf("*********************************\n");
printf("请选择:>");
scanf("%d", &select);
if(select == 0)
break;
switch(select)
{
case 1:
printf("请输入要插入的数据(-1结束):");
while(scanf("%d", &Item), Item != -1)
{
push_back(&mylist, Item);
}
break;
case 3:
show_list(&mylist);
break;
default:
break;
}
}
return 0;
}
2. 结果
总结
接下来做头插,尾删和头删。