提示:分多次写完
前言
之前虽然学习了一些数据结构,但是对于不熟悉的还是完整梳理一遍
一、队列
队列是上个学期《啊哈!算法》的内容,里面讲述了数组实现的方法,焦味通俗易懂,但是这次自己用链表实现了一下。
定义:
队列是一种抽象资料型别,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。 —维基百科
从字面意思可以看出,队列的重要性质:FIFO。
生活排队的时候就是如此,先进来的先出去。
以下分别是数组和链表实现队列
#include <stdio.h>
#include <conio.h>
int n = 0;
int queue[100],head,tail;
//队头指向着当前队列的第一个,队尾其实必须在最后数据的后一个。
void out()
{//出队操作
head++;//head即下标,其增加就是把之前的出队
return;
}
void push()
{//入队,从tail入
if(tail>n)
{
printf("已经越界!不可压入!\n");
getch();
return ;
}
printf("请输入想要压入的数字:");
scanf("%d",&queue[tail++]);
return ;
}
int main() {
scanf("%d",&n);
for (int i = 1; i <= n; i++)
scanf("%d",&queue[i]);
head = 1;
tail = n + 1;//一直在后面空着的那个
push();
out();
for(int i=head;i<tail;i++)
printf("%d ",queue[i]);
return 0;
}
以下是链表部分
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct node{
int num;
struct node *next;
}Node,*Link ;
Link Creat()//初始链表
{
Link head = (Link)malloc(sizeof(Node));
head->next = NULL;
Node *s,*r=head;
printf("请输入要初始化的内容,输入0结束\n");
int x;
scanf("%d",&x);
while(x)
{
s = (Link)malloc(sizeof(Node));//开辟节点
s->num = x;//存入内容
r->next= s;
r=s;
scanf("%d",&x);
}
r->next = NULL;
return head ;
}
void Out(Link head)
{//出队操作,考虑到FIFO 只能把头节点后面那个去掉
Node *p = head->next ;
head->next=p->next;
free(p); //直接在头节点进行删除
return ;
}
void show(Link head)
{//打印内容
Node *p=head->next;
while(p)
{
printf("%d ",p->num);
p=p->next;
}
return ;
}
void In(Link head)
{//入队操作,FIFO原则决定了其必须在最后面增加数据
Link p=head->next;
while(p->next)
p = p->next;//一直往后找,必须找到最后面
printf("请输入要追加的内容:");
int x;
scanf("%d",&x);
Link s = (Link)malloc(sizeof(Node));//开辟节点
s->num = x;//存入内容
p->next = s;
p = s;
p->next = NULL;
return ;
}
int main()
{
Node *head = Creat();
Out(head);
In(head);
show(head);
return 0;
}
2、栈
数组实现 栈
#include <stdio.h>
int a[5],top = 1;//top表示栈底,从1开始
void Init()
{//初始化 栈
printf("请输入要压入的数据:");
while(1)
{
int t;
scanf("%d",&t);
if(t!=0)
a[top++]=t;
else
break;
}
printf("初始化完成!\n");
return ;
}
void push()
{//入栈操作
printf("请输入要压入的数据:");
top++;
if(top>4)
printf("上溢出!\n");
else
scanf("%d",&a[top]);
printf("压入完成!\n");
return ;
}
int pop()
{
if(top==0)
{
printf("空栈不可再弹栈!");
return 0;
}
int t = a[top] ;
top--;
return t;
}
void show()
{
for(int i=1;i<=top;i++)
printf("%d ",a[i]);
return ;
}
int main()
{
Init();
push();
int a = pop();
show();
return 0;
}
2.两栈共享空间
之前我们知道,栈可以比喻为一种箱子
压箱底,就好比 栈底
这是个传统的栈
如果像两瓶子一样对齐然后合并,那么他们的空间可以做到共享
我暂时用不到的空间,可以借给你用;反之亦然
数组代码实现(其实也只能使用数组实现,因为由图可以看见,需要是
两个确定容量的 容器(栈),才可以对接
#include <stdio.h>
#define MAX 10//两个栈的总空间为10
struct node{
int num;
char d;//属于左栈(l)还是右栈(r)
}stack[10];
int left = -1,right = MAX;//左边要在-1开始,右边要从末尾的后一个开始
int whether()
{//判断是否栈满
if(left+1==right)
return 1;
else
return 0;
}
int FullLeft()
{//左栈底部是否空
if(left<0)
{
printf("左栈已空!");
return 1;
}else{
return 0;
}
}
int FullRight()
{//右栈底部是否空
if(right>MAX-1)
{
printf("右栈已空!");
return 1;
}else{
return 0;
}
}
void PushLeft()
{//压入左栈
if(whether())
{
printf("栈已满,不可继续压入!\n");
return;
}
printf("请输入您所需要从左压入的内容:");
left++;
scanf("%d",&stack[left].num);//先移动一下再存放
stack[left].d='l';
return ;
}
void PushRight()
{//压入左栈
if(whether())
{
printf("请栈已满,不可继续压入!\n");
return;
}
printf("请输入您所需要从右压入的内容:");
scanf("%d",&stack[--right].num);//先移动一下再存放
stack[right].d='r';
return ;
}
void PopLeft()
{//从左边出栈
if(FullLeft())
return ;
stack[left].num=0;//归零
stack[left].d='n';//NONE的意思
left--;//完事了,回去
return ;
}
void PopRight()
{//从左边出栈
if(FullRight())
return ;
stack[right].num=0;//归零
stack[right].d='n';//NONE的意思
right++;//完事了,回去
return ;
}
int main(){
PushLeft();
PushLeft();
PushLeft();
PushLeft();
PushLeft();
PushRight();
PushRight();
PushRight();
PushRight();
PushRight();
PushRight();//这里第十一次压入内容,就会显示压入失败
for(int i=0;i<MAX;i++)
{
printf("%d是%d\n",i,stack[i].num);
}
return 0;
}
二、使用步骤
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。