链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
想要看懂链表程序,必须看懂这幅图!
关于链表更多了解,详看百度百科!
参考代码:
=========================================
#ifndef LIST_H
#define LIST_H
typedef char T;
//定义节点结构体
typedef struct NODE{
T data;
struct NODE *next;
}Node;
//链表结构体
typedef struct LIST{
Node *phead;
int size;
}List;
List *createList();
Node *enctypeNode(T data);
int appendList(List *plist,T data);
int insertBefore(List *plist,T data);
int insertByindex(List *plist,T data,int index);
T findByindex(List *plist,int index);
int getSzie(List *plist);
int removeAt(List *plist,int index);
int destoryNode(Node *node);
int destoryList(List *plist);
#endif
============================================
#include
#include "list.h"
//创建链表
List *createList()
{
List *plist=malloc(sizeof(List));
plist->size=0;
plist->phead=malloc(sizeof(Node));
plist->phead->data=0;
plist->phead->next=NULL;
return plist;
}
//封装数据
Node *enctypeNode(T data)
{
//定义一个新的节点存放数据
Node *newnode=malloc(sizeof(Node));
//将数据存放入数据域
newnode->data=data;
newnode->next=NULL;
return newnode;
}
//追加数据到链表末尾
int appendList(List *plist,T data)
{
//定义一个新节点接受封装好的数据
Node *newnode=enctypeNode(data);
//首先找到头节点的指针欲
Node *temp=plist->phead;
while(temp->next)
{
temp=temp->next;
}
temp->next=newnode;
plist->size++;
return 0;
}
//向第一个节点位置添加数据
int insertBefore(List *plist,T data)
{
//定义一个新节点接受封装好的数据
Node *newnode=enctypeNode(data);
newnode->next=plist->phead->next;
plist->phead->next=newnode;
plist->size++;
return 0;
}
//通过下标添加数据
int insertByindex(List *plist,T data,int index)
{
//处理索引越界
if(index<1)
index=1;
if(index>plist->size)
index=plist->size;
Node *newnode=enctypeNode(data);
//定义两个指针,一个存放当前位置,一个存放前一个位置
Node *temp=plist->phead;
Node *temp1=temp;
while(index--)
{
temp1=temp;
temp=temp->next;
}
newnode->next=temp1->next;
temp1->next=newnode;
plist->size++;
return 0;
}
=========================================
测试main函数
=========================================
#include
#include "list.h"
int main(int argc,char **argv)
{
//创建链表
List *plist=createList();
//添加数据
char c;
for(c='a';c<='z';c++)
{
appendList(plist,c);
}
=========================================
源代码:list.rar