C语言实现数据结构的链表
来源:互联网 发布:实施国家大数据战略 编辑:程序博客网 时间:2024/04/20 18:26
链表是用一组任意的存储单元来存放线性表的结点.
为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址信息,这个信息称为指针或链
下面是C语言实现链表的数据结构及基本的算法。
# include <stdio.h>
# include <stdlib.h>
typedef char DataType; //定义节点数据域类型
typedef struct node //节点类型定义
{
DataType data; //节点的数据域
struct node *next; //节点的指针域指向下一个节点
}ListNode;
typedef ListNode *LinkList;
ListNode *p; //定义节点指针
LinkList head; //定义链表头指针
/*错误信息输出函数*/
void Error(char *message)
{
fprintf(stderr,"Error:%s/n",message); //输出错误信息
exit(1);//终止程序,返回1给操作系统
}
/*打印输出链表*/
void printList(LinkList head)
{
ListNode *p; //节点
int i=0;
if(head!=NULL)
{
p=head;
while(p->next!=NULL)
{
p=p->next;
printf("node[%d]=%c/n",i,p->data);
i++;
}
}
}
/*创建链表*/
LinkList CreateList()
{
char ch;
LinkList head=(LinkList)malloc(sizeof(ListNode));//生成头节点
ListNode *s,*r;
r=head;
head->data='*';
while((ch=getchar())!='/n')
{
s=(LinkList)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
/*取得第i个结点*/
ListNode * getNode(LinkList head,int i)
{
int j=0;
ListNode *p;
p=head;
while(p->next!=NULL)
{
p=p->next;
j++;
if(j==i)
{
return p;
}
}
return NULL;
}
/*根据结点值域找到结点*/
ListNode * getNodeByKey(LinkList head,DataType key)
{
int j=0;
ListNode *p;
char nodeData;
p=head;
while(p->next!=NULL)
{
p=p->next;
nodeData=p->data;
if(key==nodeData)
{
return p;
}
}
return NULL;
}
/*插入结点*/
void insertList(LinkList head,DataType x,int i)
{
ListNode *p,*s;
p=getNode(head,i-1);
if(p==NULL)
{
Error("position error");
}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x;
s->next=p->next;
p->next=s;
}
/*删除结点*/
void deleteList(LinkList head,int i)
{
ListNode *p,*r;
p=getNode(head,i-1);
if(p==NULL||p->next==NULL)
{
Error("position error");
}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
LinkList list;
ListNode *node;
int getIndex=4;
list=CreateList(); //创建链表
printList(list);
node=getNode(list,getIndex); //取得链表中索引为4的节点
printf("get node%d is%c/n",getIndex,node->data);
printf("insert X to node %d/n",3);
insertList(list,'X',3); //在索引为3的地方插入节点
printList(list);
printf("delete %d node/n",3);
deleteList(list,3); //删除索引为3的节点
printList(list);
}
- C语言实现数据结构的链表
- 数据结构 链表的实现(C语言)
- <数据结构>链栈的C语言实现
- [c语言]数据结构 顺序表的实现
- C语言数据结构_链表的实现
- [数据结构]C语言链表实现
- 【数据结构】C语言实现顺序链表
- 【数据结构】C语言实现链表
- C语言数据结构-栈-链表实现
- C语言实现LinkedList链表数据结构
- [数据结构]C语言链表实现
- 【数据结构】数据结构C语言的实现(线性表)
- 数据结构 C语言实现 线性表的链式实现
- 数据结构:顺序表的实现(C语言实现)
- 数据结构(C语言实现)
- 数据结构C语言实现
- 数据结构(C语言实现)
- C语言数据结构 链表的合并
- 一个程序员老总的年终总结
- 初来乍到,多多关照!
- 不会建模
- Struts 2.0系列之一--Struts 2.0概述
- AT指令短信开发集
- C语言实现数据结构的链表
- 简要分析C中结构的位域成员
- 现代生活21防
- 游戏客户端编码-2
- 拼音爱好者的好消息:紫光V6发版
- 《给初学者的Windows Vista的补遗手册》之068
- 《给初学者的Windows Vista的补遗手册》之069
- 如何获取局域网中的所有 SQL Server 服务
- 技术翻译答客问之一