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

2.单链表内元素的插入

2010-04-29 19:16 190 查看
 

 

多的不说,对于这些概念等在严蔚敏老师的书中都讲的很详细,这里是给大家分享一些实例。让大家加深数据结构的学习。
希望大家多多支持:
C++奋斗乐园|C++论坛|算法学习|ACM/ICPC :http://www.cppleyuan.com/
②群:23840480

 

/********************************              单链表的插入                  ********************************/
//算法功能:在单链表的第i个位置插入一个新的数据元素e.
//算法思路:该算法可分三步实现:①查找,在单链表中找到第 i-1 个结点并由指针p指示;②申请,申请新结点s,将其数据
//域的值置为e;③插入,通过修改指针域将新结点s插入单链表。
#include <stdio.h>
#include <malloc.h>

typedef int Status;
#define OK 1;
#define ERROR 0;

//定义链表数据存储结构
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *Linklist;

//打印链表元素
void print_list(Linklist L)
{
Linklist p;
printf("建立的单链表为:/n");
p = L->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("/n");
}

//逆序输入数据元素,建立带头结点的单链表
void creat_list(Linklist &L)
{
Linklist p;
L = (LNode*) malloc (sizeof(LNode));   //建立链表头结点
L->next = NULL;
printf("请逆序输入链表数据元素Ctrl+Z结束,建立带头结点的链表:/n");
p = (LNode*) malloc (sizeof(LNode));
while((scanf("%d", &(p->data))) != EOF)   // 按Ctrl+Z组合键结束输入
{
p->next = L->next;
L->next = p;
p = (LNode*) malloc (sizeof(LNode));
}
}

//在链表中第 i 个位置插入新的元素e
Status ListInsert_L(Linklist L, int i, int e)
{
int j = 0;
LNode *s, *p;
p = L;
while(p && j<i-1)
{
p = p->next;
j++;
}
if(!p || j>i-1)
return ERROR;
s = (Linklist) malloc (sizeof(LNode));
if(s == NULL)
return ERROR;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}

int main()
{
Linklist L;
int e, i;
creat_list(L);
print_list(L);
printf("请输入要插入元素的位置i:/n");
scanf("%d", &i);
printf("请输入要插入的元素的值:/n");
scanf("%d", &e);
ListInsert_L(L, i, e);
print_list(L);
return 0;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐