单链表
来源:互联网 发布:易语言qq自动回复源码 编辑:程序博客网 时间:2024/06/04 00:37
单链表建立:
#include <stdio.h>
#include <stdlib.h>
//单链表的定义:
typedef char DataType; //DataType可以是任何相应的数据类型如int, float或char
typedef struct node //结点类型定义
{ DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode;
typedef ListNode *LinkList;
void main()
{
LinkList head;
LinkList CreateListF(void);
void PrintList(LinkList head);
head=CreateListF(); //建立单链表
PrintList(head); //打印单链表
}
//单链表的建立:
LinkList CreateListF(void)
{ char ch;
LinkList head; //头指针
ListNode *s; //工作指针
head=NULL; //链表开始为空
ch=getchar();
while (ch!='\n')
{ s=(ListNode *)malloc(sizeof(ListNode)); //生成新结点
s->data=ch;
s->next=head;
head=s;
ch=getchar();
}
return head; //返回头指针
}
//单链表的打印:
void PrintList(LinkList head)
{
ListNode *p;
for(p=head;p;p=p->next)
printf("%c",p->data);
printf("\n");
}
单链表插入:
#include <stdio.h>
#include <stdlib.h>
//单链表的定义:
typedef char DataType; //DataType可以是任何相应的数据类型如int, float或char
typedef struct node //结点类型定义
{ DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode;
typedef ListNode *LinkList;
void main()
{
LinkList head;
DataType x;
int i;
LinkList CreateListR1(void);
LinkList GetNode(LinkList head,int i);
void InsertList(LinkList head,DataType x,int i);
void PrintList(LinkList head);
head=CreateListR1(); //建立单链表
PrintList(head); //打印单链表
printf("请输入欲插入的元素:");
scanf("%c",&x);
printf("请输入欲插入元素的位置:");
scanf("%d",&i);
InsertList(head,x,i);
PrintList(head); //打印单链表
}
//单链表的建立:
LinkList CreateListR1(void)
{ char ch;
LinkList head=(ListNode *)malloc(sizeof(ListNode));
ListNode *s,*r;
r=head; //尾指针初值指向头结点
while ((ch=getchar())!='\n')
{ s=(ListNode *)malloc(sizeof(ListNode)); //生成新结点
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head; //返回头指针
}
//单链表的打印:
void PrintList(LinkList head)
{
ListNode *p;
for(p=head->next;p;p=p->next)
printf("%c",p->data);
printf("\n");
}
//单链表的查找
LinkList GetNode(LinkList head,int i)
{//在带头结点的单链表head中查找第i个结点
int j;
ListNode *p;
p=head;j=0; //从头结点开始扫描
while (p->next && j<i) //顺指针向后扫描,直到链表尾或找到为止
{ p=p->next;
j++;
}
if (i==j)
return p; //找到了第i个结点
else
return NULL; //找不到满足条件的结点
}
//单链表的插入
void InsertList(LinkList head,DataType x,int i)
{//将值为x的新结点插入到带头结点的单链表head的第i个结点的位置上
ListNode *p,*s;
p=GetNode(head,i-1); //寻找第i-1个结点
if(p==NULL)
{
printf("插入位置非法\n");
exit(0);
}
s=(ListNode *)malloc(sizeof(ListNode)); //生成新结点
s->data=x;
s->next=p->next;
p->next=s;
}
查找:
#include <stdio.h>
#include <stdlib.h>
//单链表的定义:
typedef char DataType; //DataType可以是任何相应的数据类型如int, float或char
typedef struct node //结点类型定义
{ DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode;
typedef ListNode *LinkList;
void main()
{
LinkList head;
ListNode *p;
int i;
LinkList CreateListR1(void);
LinkList GetNode(LinkList head,int i);
void PrintList(LinkList head);
head=CreateListR1(); //建立单链表
PrintList(head); //打印单链表
printf("请输入欲查找结点的序号:");
scanf("%d",&i);
p=GetNode(head,i);
if (p==NULL)
printf("未找到\n");
else
printf("找到第%d结点的值是%c\n",i,p->data);
}
//单链表的建立:
LinkList CreateListR1(void)
{ char ch;
LinkList head=(ListNode *)malloc(sizeof(ListNode));
ListNode *s,*r;
r=head; //尾指针初值指向头结点
while ((ch=getchar())!='\n')
{ s=(ListNode *)malloc(sizeof(ListNode)); //生成新结点
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head; //返回头指针
}
//单链表的打印:
void PrintList(LinkList head)
{
ListNode *p;
for(p=head->next;p;p=p->next)
printf("%c",p->data);
printf("\n");
}
//单链表的查找
LinkList GetNode(LinkList head,int i)
{//在带头结点的单链表head中查找第i个结点
int j;
ListNode *p;
p=head;j=0; //从头结点开始扫描
while (p->next && j<i) //顺指针向后扫描,直到链表尾或找到为止
{ p=p->next;
j++;
}
if (i==j)
return p; //找到了第i个结点
else
return NULL; //找不到满足条件的结点
}
单链表删除:
#include <stdio.h>
#include <stdlib.h>
//单链表的定义:
typedef char DataType; //DataType可以是任何相应的数据类型如int, float或char
typedef struct node //结点类型定义
{ DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode;
typedef ListNode *LinkList;
void main()
{
LinkList head;
int i;
LinkList CreateListR1(void);
LinkList GetNode(LinkList head,int i);
void DeleteList(LinkList head,int i);
void PrintList(LinkList head);
head=CreateListR1(); //建立单链表
PrintList(head); //打印单链表
printf("请输入欲删除结点的位置:");
scanf("%d",&i);
DeleteList(head,i);
PrintList(head); //打印单链表
}
//单链表的建立:
LinkList CreateListR1(void)
{ char ch;
LinkList head=(ListNode *)malloc(sizeof(ListNode));
ListNode *s,*r;
r=head; //尾指针初值指向头结点
while ((ch=getchar())!='\n')
{ s=(ListNode *)malloc(sizeof(ListNode)); //生成新结点
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head; //返回头指针
}
//单链表的打印:
void PrintList(LinkList head)
{
ListNode *p;
for(p=head->next;p;p=p->next)
printf("%c",p->data);
printf("\n");
}
//单链表的查找
LinkList GetNode(LinkList head,int i)
{//在带头结点的单链表head中查找第i个结点
int j;
ListNode *p;
p=head;j=0; //从头结点开始扫描
while (p->next && j<i) //顺指针向后扫描,直到链表尾或找到为止
{ p=p->next;
j++;
}
if (i==j)
return p; //找到了第i个结点
else
return NULL; //找不到满足条件的结点
}
//单链表的删除
void DeleteList(LinkList head,int i)
{//删除带头结点的单链表中的第i个结点
ListNode *p,*r;
p=GetNode(head,i-1); //寻找第i-1个结点
if(p==NULL||p->next==NULL)
{
printf("删除位置非法\n");
exit(0);
}
r=p->next;
p->next=r->next;
free(r); //释放第i个结点
}
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- jquery easyui datagrid 分页 详解
- ActiveMQ - tcp 协议接收消息
- XP dos命令方式 去快捷方式箭头
- kindle来袭,当当错过的那些机会
- jquery select 排序
- 单链表
- 【jbpm3.2.3】之二 sample
- Java SE 自学笔记3 之数组
- 堆排序C语言实现
- 认识feof的微妙
- TCP的socket的服务器端和客户端实例(linux下)
- Android中的visibility属性的区别
- 码农的恋爱观:只有程序员能看懂
- 双链表