定义
链表节点长这个样子,数据域data指针域next指向下一个结点
typedef struct lnode {int data;struct lnode *next;
}lnode ,*linklist;
初始化
/*初始化*/
linklist f1(){linklist l=(linklist)malloc(sizeof(lnode));l->next=NULL;return l;
}int main(){linklist l;l=f1();
}
初始化的结果,头结点为l的空链表
给链表输入数据
头插法
void f2(lnode*l,int n){for(int i=0;i<n;i++){lnode* p=(linklist)malloc(sizeof(lnode));printf("请输入第%d个数",i+1);scanf("%d",&p->data);p->next=l->next;l->next=p;}F();
}
头插法插入元素链表元素是相反的
改良一下
void f2(lnode*l,int n){for(int i=0,j=n;i<n;i++,j--){lnode* p=(linklist)malloc(sizeof(lnode));printf("请输入第%d个数",j);scanf("%d",&p->data);p->next=l->next;l->next=p;}F();
}
尾插法
void f4(linklist l,int n){lnode *r;//尾指针r=l; for(int i=0;i<n;i++){lnode* p=(linklist)malloc(sizeof(lnode));printf("请输入第%d个数",i+1);scanf("%d",&p->data);p->next=NULL;r->next=p;r=p; } F();
}
查找
按值查找
void f5(linklist l, int e) {lnode *p;p = l;int i = 1;while (p) {if (p->data == e) {printf("%d 在第 %d 个位置", e, i);break;}p = p->next;i++;}if (!p) {printf("元素 %d 不在链表中。", e);}F();
}
按位查找
void f6(linklist l,int i){int length=1;lnode *p,*q;int ii=1;p = l;q=l->next;while(p){p=p->next;length++;}if(i>length)printf("位置输入不合法");while (q){if(ii==i){printf("第%d个是%d",i,q->data);}q=q->next;ii++;}F();
}
给指定位置i插入元素e
void f7(linklist l,int i,int e){lnode *p=(lnode*)malloc(sizeof(lnode));p->data=e;for(int ii=1;ii<i;ii++)l=l->next;p->next=l->next;l->next=p;
}
删除指定位置的元素
void f8(linklist l,int i){lnode *p=(lnode*)malloc(sizeof(lnode));for(int ii=1;ii<i;ii++)l=l->next;p=l;l->next=l->next->next;
}
完整代码
#include <stdio.h>
#include <stdlib.h>
typedef struct lnode {int data;struct lnode *next;
}lnode ,*linklist;
void F(){printf("\n");printf("------------------------");printf("\n");
}
/*初始化*/
linklist f1(){linklist l=(linklist)malloc(sizeof(lnode));l->next=NULL;return l;
}
/*头插法*/
void f2(lnode*l,int n){for(int i=0,j=n;i<n;i++,j--){lnode* p=(linklist)malloc(sizeof(lnode));printf("请输入第%d个数",j);scanf("%d",&p->data);p->next=l->next;l->next=p;}F();
}
/*输出链表*/
void f3 (linklist l){lnode *p;p=l->next;//跳过头结点 printf("链表是");while(p){printf("%d ",p->data);p=p->next;}F();
}
/*尾插法*/
void f4(linklist l,int n){lnode *r;//尾指针r=l; for(int i=0;i<n;i++){lnode* p=(linklist)malloc(sizeof(lnode));printf("请输入第%d个数",i+1);scanf("%d",&p->data);p->next=NULL;r->next=p;r=p; } F();
}
/*按值查找 */
void f5(linklist l, int e) {lnode *p;p = l;int i = 1;while (p) {if (p->data == e) {printf("%d 在第 %d 个位置", e, i);break;}p = p->next;i++;}if (!p) {printf("元素 %d 不在链表中。", e);}F();
}
/*按位查找*/
void f6(linklist l,int i){int length=1;lnode *p,*q;int ii=1;p = l;q=l->next;while(p){p=p->next;length++;}if(i>length)printf("位置输入不合法");while (q){if(ii==i){printf("第%d个是%d",i,q->data);}q=q->next;ii++;}F();
}
/*给指定位置i插入元素e*/
void f7(linklist l,int i,int e){lnode *p=(lnode*)malloc(sizeof(lnode));p->data=e;for(int ii=1;ii<i;ii++)l=l->next;p->next=l->next;l->next=p;
}
/*删除指定位置的元素*/
void f8(linklist l,int i){lnode *p=(lnode*)malloc(sizeof(lnode));for(int ii=1;ii<i;ii++)l=l->next;p=l;l->next=l->next->next;
}
int main(){linklist l;l=f1();int a;printf("请输入链表l的长度");scanf("%d",&a);
// f2(l,a);
// f3(l);f4(l,a);f3(l);//按值查找
// int e;
// q=l->next;
// scanf("%d",&e);
// f5(l,e);//按位查找
// int i;
// printf("请输入要查找的位序");
// scanf("%d",&i);
// f6(l,i);//给指定位置i插入元素e
// int i,e;
// printf("请输入要插入的位序");
// scanf("%d",&i);
// printf("请输入要插入的数字");
// scanf("%d",&e);
// f7(l,i,e);
// f3(l);//删除指定位置的元素
// int i;
// printf("请输入要删除的位序");
// scanf("%d",&i);
// f8(l,i);
// f3(l);
}