不带头结点的单链表的实现(C语言)
来源:互联网 发布:辽宁北方广电网络 编辑:程序博客网 时间:2024/05/16 17:33
终端结点无后继,故终端结点的指针域为空,即NULL。
代码实现如下:(可复制,直接运行)
#include <stdio.h>
#include<stdlib.h>
typedef int datatype;//假设节点的数据域为整型
typedef struct link_node //节点类型的定义
{
datatype info;//节点的数据域
struct link_node *next;
} node;
typedef node *linklist;
linklist createbystack();//头部 插入创建
linklist createbyqueue();//尾部插入创建
void print(linklist head);//打印单链表
linklist locate(linklist head,int i);//定位某个节点
linklist Delete(linklist head,int i);//删除指定的 某个节点
linklist insert(linklist head,int i,datatype x);//插入某个节点
int main()
{
linklist head;
head=createbystack();
print(head);
int x,i;
printf("\nplease input the info and position of you want to insert:\n");
printf("the info is:");
scanf("%d",&x);
printf("the position is:");
scanf("%d",&i);
head=insert(head,i,x);
print(head);
printf("\nplease input the position of you want to delete:\n");
printf("the position is:");
scanf("%d",&i);
Delete(head,i);
print(head);
return 0;
}
linklist createbystack() //头插法建立单链表
{
linklist head,s;
datatype x;
head=NULL;
printf("please input some data:\n");
scanf("%d",&x);
while(x!=0) //以0结束s
{
s=(linklist)malloc(sizeof(node));//生成插入节点
s->info=x;
s->next=head;
head=s;
scanf("%d",&x);
}
return head;
}
linklist createbyqueue()
{
linklist head,r,s;
datatype x;
head=r=NULL;
printf("please input some data:\n");
scanf("%d",&x);
while(x!=0)
{
s=(linklist)malloc(sizeof(node));
s->info=x;
if(head==NULL)
{
head=s;
}
else
{
r->next=s;
}
r=s;
scanf("%d",&x);
}
if(r)
r->next=NULL;
return head;
}
void print(linklist head)
{
linklist p;
int i=0;
p=head;
printf("\nList is:\n");
while(p)
{
printf("%5d",p->info);
p=p->next;
i++;
if(i%10==0)
printf("\n");
}
}
void delList(linklist head) //release the List
{
linklist p=head;
while(p)
{
head=p->next;
free(p);
p=head;
}
}
linklist locate(linklist head,int i)
{
linklist p;
int k;
if(i<0) return NULL;
k=0;
p=head;
while(p!=NULL&&k<i)
{
p=p->next;
k++;
}
return p;
}
linklist insert(linklist head,int i,datatype x)
{
linklist p,q;
q=(linklist)malloc(sizeof(node));
q->info=x;
if(i==0)
{
q->next=head;
head=q;
}
else
{
p=locate(head,i-1);
if(p==NULL)
{
printf("error!");
}
else
{
q->next=p->next;
p->next=q;
}
}
return head;
}
linklist Delete(linklist head,int i)
{
linklist p,q;
if(i==0)
{
q=head;
head=q->next;
}
else
{
p=locate(head,i-1);
if(p==NULL)
{
printf("error");
}
else if(p->next==NULL)
{
printf("error");
}
else
{
q=p->next;
p->next=q->next;
}
}
free(q);
return head;
}
运行结果如下
:
- 不带头结点的单链表的实现(C语言)
- C语言实现单链表-不带头结点
- C语言实现单链表(不带头结点)的基本操作
- C语言实现单链表节点的删除(不带头结点)
- C语言实现单链表(不带头结点)节点的插入
- C语言实现单链表(不带头结点)的逆序打印
- C语言实现单链表(带头结点)的基本操作
- C语言实现单链表节点的删除(带头结点)
- C语言实现单链表的节点插入(带头结点)
- C语言实现单链表的逆序打印(带头结点)
- C语言实现单链表(不带头结点)
- 不带头结点的 单链表的各种操作实现c语言
- 双指针不带头结点的链栈的实现(C语言)
- 双指针不带头结点的链栈的实现(C语言)
- C语言实现双向非循环链表(不带头结点)的基本操作
- C语言实现双向非循环链表(不带头结点)的逆序打印
- C语言实现双向非循环链表(不带头结点)的节点插入
- C语言实现双向非循环链表(不带头结点)的清空
- Go游戏服务器开发的一些思考(八):Docker桥接网络及固定IP
- Python--正则表达式
- JZOJ1288.【USACO题库】3.3.1 Riding the Fences骑马修栅栏
- OSAL系统相关问题
- 8.8
- 不带头结点的单链表的实现(C语言)
- Qt读取三种文件,ini配置文件,JSON文件,和xml文件
- 170713 Batch-Normalization and AdaBN(待整理)
- POJ 3158 Kickdown 笔记
- c语言数据结构
- 变换元素transform和过渡元素transition混合使用
- 【HDU 1869】六度分离
- Java菜鸟学习日记10
- MySQL的数据过滤