考研数据结构目录
1、顺序表(链表操作)
2、堆栈与队列
后续将持续更新~
前提声明:本篇模板是建立在有基础上提供的,建议在脑海中已有链表操作的动态想法可以看。思想很重要,代码模板只是辅助作用,已将代码尽可能的精简,小伙伴们可以更加有结构化的观看~
目录
初始化(记住即可)
typedef struct node{
int data;
struct node * next;
}NODE;
1、创建链表
//创建
void create(){
NODE *h,*s,*p;
h=(NODE*)malloc(sizeof(NODE));
p=h;
int x;
int cycle=1;//标记作用,判断是否终止输入
while(cycle){
printf("请输入一个数: \n");
scanf("%d",&x);
if(x){
s=(NODE*)malloc(sizeof(NODE));
s->data=x;
s->next=p->next;
p->next=s;
p=s;
}else{
cycle=0;
}
}
}
2、查找(按位置、按节点值)
//按位置查找
NODE * search_position(NODE * head,int i){
NODE *p=head;
int k=0;//用来标识位置
//如果当前没有到第i个位置并且后面还有节点,那就继续找
while(k<i&&p->next!=NULL){//用人话讲:没找到且没找完
p=p->next;k++;
}
if(k==i) return p;
else return NULL;
}
//按节点值查找
NODE * search_value(NODE * head,int x){
NODE *p=head;
while(p->next&&p->next->data!=x){
p=p->next;
}
if(p->next) return p;
else return NULL;
}
3、插入(按顺序、按位置)
//按顺序插入
void insert_order(NODE * head,int x){
NODE *p,*q;
p=head;
while(p->next&&p->next->data<x){
p=p->next;
}
q=(NODE*)malloc(sizeof(NODE));
q->data=x;
q->next=p->next;
p->next=q;
}
//按位置插入
void insert_position(NODE * head,int i,int x){
NODE * p,*q;
p=head;
int k=0;
while(i<k&&p->next){
p=p->next;
k++;
}
if(i==k){
q=(NODE*)malloc(sizeof(NODE));
q->data=x;
q->next=p->next;
p->next=q;
}else{
printf("插入失败");
}
}
4、删除(按位置、按结点值)
//按位置删除
void del_position(NODE*head,int i){
NODE *p,*q;
p=head;
int k=0;
while(p->next&&i<k-1){
p=p->next;
k++;
}
if(i==k){
q=p->next;
p->next=q->next;
free(q);
}else{
printf("删除失败");
}
}
//按节点值删除
void del_value(NODE *head,int x){
NODE *p,*q;p=head;
while(p->next&&p->next->data!=x){
p=p->next;
}
if(p->next){
q=p->next;
p->next=q->next;
free(q);
}else{
printf("删除失败");
}
}
后续会持续更新顺序表存储模板,循环链表等一些跟考研直接挂钩的算法模板,敬请期待~
没有什么是比在痛苦中成长更快的。在挑战中前行,在失败中成长,诸位考研人加油~