C语言链表与递归
链表基本操作
下面是几种对链表的创建,删除节点,插入节点的操作
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int value; //数据域
struct Node *next; //指针域
}node;
//创建头结点
node *createlist(){
node *headnode=(node*)malloc(sizeof(node));
headnode->value=0; //初始化
headnode->next=NULL;
return headnode;
}
//创建节点
node* createNode(int i){
node *newnode=(node*)malloc(sizeof(node));
newnode->value=i;
newnode->next=NULL;
return newnode;
}
//插入链表的节点
void insertNode(node*headnode,int i){
node *newnode=createNode(i);
newnode->next=headnode->next;
headnode->next=newnode;
}
//打印出链表
void printlist(node *headnode)
{
node *pmove=(node *)malloc(sizeof(node));
pmove=headnode->next;
while(pmove!=NULL)
{
printf("%d\n",pmove->value);
pmove=pmove->next;
}
}
//删除指定数值的节点
void deleteNodeByAppoint(node* headnode,int posvalue){
node* posnode=headnode->next;
while(!((posnode->next)->value==posvalue)){
posnode=posnode->next; //将指针直接跳过该数值
}
posnode->next=(posnode->next)->next;
}
int main(){
node *linkedlist=createlist();
insertNode(linkedlist,5);
insertNode(linkedlist,80);
insertNode(linkedlist,7);
insertNode(linkedlist,8);
insertNode(linkedlist,20);
insertNode(linkedlist,44);
insertNode(linkedlist,48);
insertNode(linkedlist,15);
insertNode(linkedlist,7);
printlist(linkedlist);
printf("************************\n");
deleteNodeByAppoint(linkedlist,20);
printlist(linkedlist);
return 0;
关于递归的举例
在C语言中常常用到递归
递归不仅能实现一些函数循环等等做不到的事情
还可以使得代码的逻辑关系更加清晰,思维更加严谨
下面是几种递归的实际应用的举例
找出最大的数字
#include <stdio.h>
int f(int arr[],int n){
if(n==0){
return arr[0];
}else{
if(f(arr,n-1)>arr[n]){
return f(arr,n-1);
}else{
return arr[n];
}
}
}
int main(){
int arr[]={1,5,3,6,7,9,2,8,2,6,2,5,2};
printf("前n项的最大值%d",f(arr,5));
return 0;
}
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#include <stdio.h>
int main()
{
int i=5;
void palin(int n);
printf("请输入5个字符\40:\40");
palin(i);
printf("\n");
}
void palin(int n){
char next;
if(n<=1) {
next=getchar();
printf("相反顺序输出结果\40:\40");
putchar(next);
} else {
next=getchar();
palin(n-1);
putchar(next);
}
}