数据结构-c语言代码实现-单链表的基本操作-带头节点-创新互联
目录
创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为鄂托克前企业提供专业的成都做网站、网站制作,鄂托克前网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。单链表-动态分配顺序存储结构
1.单链表—初始化
2.创建单链表
3.单链表-求表长
4.单链表-按位插入
5.单链表-按位删除
6.单链表-查找-按值查找位
7.单链表-判空
8.单链表-销毁
9.单链表-打印
代码实现结果
单链表-动态分配链式存储结构
#include#include#include#define ElemType char
typedef struct Snode{
ElemType data;//数据域
struct Snode *next;//指针域
}Snode,*ListSLink;//结点=数据域+指针域
1.单链表—初始化void ListSLink_Init(ListSLink &L){
L=(ListSLink)malloc(sizeof(Snode));//生成头结点
L->next=NULL;
printf("初始化成功\n");
}
2.创建单链表void ListSLink_Creat(ListSLink &L)
{
ElemType data;
Snode *p=L;//创建指针指向头节点 方便后续遍历
printf("输入数据:\n");
scanf("%c",&data);
getchar();
while(data!='#'){
Snode *s=(Snode *)malloc(sizeof(Snode));//新建节点插入
s->next=p->next;
p->next=s;
s->data=data;
p=p->next;
printf("输入数据:\n");
scanf("%c",&data);
getchar();
}
}
3.单链表-求表长int ListSLink_Length(ListSLink L){
int i=0;//计数器
Snode *p=L;//p指向头节点
while(p->next!=NULL){//若p的下一个节点不为空 则p指向p的下一个节点(遍历) 计数器++
i++;
p=p->next ;
}
return i;//返回计数值
}
4.单链表-按位插入void ListSLink_Insert(ListSLink &L,int pos,ElemType newval){
int len=ListSLink_Length(L);//求表长
if(pos-1>len||pos<1){//若插入位置不合法,则程序异常退出
printf("链表插入失败\n");
exit(-1);
}
else{
Snode *p=L;//创建指针指向头节点 方便后续遍历
while(--pos){//指针指向要插入位置
p=p->next;
}
Snode *s=(Snode *)malloc(sizeof(Snode));//新建节点插入
s->data =newval;//为新节点数据赋值
s->next=p->next ;//插入链表中
p->next =s;
printf("链表插入成功\n");
}
}
5.单链表-按位删除void ListSLink_Delete(ListSLink &L,int pos){
int len=ListSLink_Length(L);
if(pos-1>=len||pos<1){//若删除位不合法或表为空,程序异常退出
printf("链表删除失败\n");
exit(-1);
}
else{
Snode *p=L;//创建指针指向头节点 方便后续遍历
while(--pos){//指针指向要删除的位置
p=p->next;
}
Snode *s=p->next;
p->next=s->next;
free(s); //删除并释放节点
printf("链表删除成功\n");
}
}
6.单链表-查找-按值查找位int ListSLink_Seek(ListSLink L,ElemType val){
int len=ListSLink_Length(L);//表长
int i=0;
Snode *p=L;//创建指针指向头节点 方便后续遍历
while(i!=len){//遍历整个单链表查找元素
if(p->next->data==val){//若查找成功 返回位号
printf("按值查找成功\n");
return i+1;
}
else{
p=p->next;
i++;
}
} //若遍历完整个链表未查找到值 则返回-1
printf("按值查找失败\n");
return -1;
}
7.单链表-判空void ListSLink_Isvoid(ListSLink L){
if(L->next!=NULL){
printf("链表不为空\n");
}
else{
printf("链表为空\n");
}
}
8.单链表-销毁void ListSLink_Destory(ListSLink &L){
Snode *p=L;//创建指针指向头节点 方便后续遍历
while(p->next!=NULL){//若下一个节点不为空 指针后移到下个节点 释放(删除)此节点
Snode *s=p;
p=p->next ;
free(s);
}
L->next=NULL;
printf("链表销毁成功\n");
}
9.单链表-打印void ListSLink_Print(ListSLink L){
Snode *p=L;//创建指针指向头节点 方便后续遍历
while(p->next!=NULL){//若下一个节点不为空 则指针后移到下个节点 并打印数据
p=p->next;
printf("%c ",p->data);
}
}
代码实现结果int main()
{
ListSLink L;
ListSLink_Init(L);//初始化单链表
ListSLink_Creat(L);//创建单链表
ListSLink_Insert(L,1,'A');//插入数据
ListSLink_Print(L);//打印单链表
printf("1在表中第%d位\n",ListSLink_Seek(L,'1'));
ListSLink_Delete(L,1);//按位删除
printf("单链表长度为:%d\n",ListSLink_Length(L));
ListSLink_Print(L);//打印单链表
ListSLink_Isvoid(L);//判空
ListSLink_Destory(L);//销毁单链表
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:数据结构-c语言代码实现-单链表的基本操作-带头节点-创新互联
标题链接:http://hbruida.cn/article/cecccd.html