链表相关代码(C语言),包含单链表、双链表、双向循环链表增删改查
链表反转(逆序)
//链表逆序
bool reverse_linklist(struct node *ph){
struct node *pbefore=NULL,*pafter,*pcur=NULL;
pbefore=ph;
pcur=ph->next;
if(pcur==NULL)
return false;
while(pcur!=NULL){
pafter=pcur->next;
//当前的下一个节点指向现在前面一个,
pcur->next=pbefore;
pbefore=pcur;
pcur=pafter;
}
ph->next->next=NULL;//将最后一个节点指向空
ph->next=pbefore;//将头结点指向逆序后的第一个节点
}
顺序表:
顺序表的按下标插入、按值插入、控制台输入插入、插入整个数组
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#define MAXSIZE 10
struct seqlist{
int data[MAXSIZE];
int lenght;
};
void init_seq(struct seqlist *s){
//初始顺序表
memset(s->data,0,sizeof(s->data));
s->lenght=0;
}
//按下标插入
bool insert_pos_val(struct seqlist *s,int pos,int val){
int i;
//判断插入位置是否合法
if( s->lenght ==MAXSIZE)
return false;
if(pos<0 || pos > s->lenght )
return false;
for(i=s->lenght;i>pos;i--){
s->data[i]=s->data[i-1];
}
s->data[pos]=val;
s->lenght ++;
}
//控制台输入
int input_seqlinst(struct seqlist *s,int pos){
int data,i;
if(pos>=MAXSIZE){
printf("插入失败,下标越界\n");
return -1;
}
printf("输入数据:");
for(i=0;i<pos;i++){
scanf("%d",&data);
insert_pos_val(s,i,data);
}
}
//按值插入
int insert_seqlist(struct seqlist *s,int val,int new_val){
int i,y=-1;
for(i=0;i<s->lenght;i++){
if(s->data[