您的位置:首页 > 理论基础 > 数据结构算法

数据结构之线性表的链式存储

2012-06-16 09:24 459 查看

单链表的初始化、插入、删除和遍历

#include <stdlib.h>
#include <stdio.h>
typedef struct LNode{
int data;                //链表数据
struct LNode* next;        //链表指针
}LNode,*LinkList;

/*头插法-建立单链表*/
LinkList HeadCreate(LinkList la)
{
int num=0;
int num1=0;
la=(LinkList)malloc(sizeof(LNode));        //建立头结点
la->next=NULL;
printf("请输入10个数字进行链表的初始化工作:\n");
//scanf("%d",&num);
while(num<10)
{
LNode *p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&num1);
p->data=num1;
p->next=la->next;
la->next=p;
num++;
}
return la;
}

/*单链表插入操作*/
bool InsertList(LinkList la,int i,int e)
{
//在la链表中的i位置插入数值e
int j=1;
LinkList p=la,s;
while(p && j<i)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if((s=(LinkList)malloc(sizeof(LNode)))==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}

/*单链表删除操作*/
bool DeleteList(LinkList la,int i)
{
int j=1;
LinkList p=la,q;
while(p && j<i)        //p指向第i-1个元素
{
p=p->next;
j++;
}
if(p==NULL || p->next==NULL)        //表示不存在第i-1个和第i的元素
return false;
q=p->next;
p->next=q->next;
free(q);
return true;
}
//表的遍历
void TravelList(LinkList la)
{
LinkList p=la->next;
while(p!=NULL)
{
printf("  %d->",p->data);
p=p->next;
}
printf("\n");
}

int main()
{
int a=0;//需要被插入的元素
int po=0;//插入元素的位置
LNode la;
LinkList p;
p=HeadCreate(&la);                //头插法创建长度为10的单链表
TravelList(p);
printf("请输入要插入的整数元素:\n");
scanf("%d",&a);
printf("请输入元素的位置:\n");
scanf("%d",&po);
InsertList(p,po,a);                //在链表的第2个位置插入元素10
TravelList(p);
printf("请输入要删除的元素的位置:");
scanf("%d",&po);
DeleteList(p,po);
TravelList(p);
return 0;
}
//运行环境vc6.0等一般C语言的编译器都可以


此处只是实现的单链表对于其他类型的链表基本上都是在此基础上进行的一些升级和改造,大家能理解单链表基本上就差不多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: