尾插法

线性表链式存储实验1 参照顺序表的代码结构,结合现有的项目文件(已经给出头插法创建单链表方法),完成实验项目代码,使用尾插法(参照教材算法2.7)创建单链表,其值为(‘T’,’h’,’e’,’s’,’h’,’a’,’p’,’e’,’o’,’f’,’y’,’o’,’u’),然后输出创建完成后的链表中的值。

common.h
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h> //用于设置随机数种子用

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

LINKLIST.H
#include"common.h"

typedef char ElemType; //链表数据结点中为字符类型

//链表结构定义
typedef struct Node
{
ElemType data; //数据域
struct Node *next; //指针域
}Node,*LinkList; //两个类型名字:Node用于定义结点,LinkList用于定义链表

//算法功能:初始化单链表
void InitList(LinkList *L);

//算法功能:输出链表内容
void PrintList(LinkList L);

//算法功能:头插法建立单链表
void CreateFromHead(LinkList L);

//算法功能:尾插法建立单链表
void CreateFromTail(LinkList L);

//算法功能:在单链表L中查找第i个结点
Node * Get(LinkList L,int i);

//算法功能:在单链表L中查找值为Key的结点
Node * Locate(LinkList L,ElemType key);

//算法功能:单链表插入操作算法 ,在第i个位置插入e
void InsList(LinkList L,int i,ElemType e);

//算法功能:删除单链表中第i个结点
int DelList(LinkList L,int i,ElemType *e);

//算法:两个有序单链表的合并
LinkList MergeLinkList(LinkList LA, LinkList LB);

LINKLIST.C
#include"linklist.h"

//对单链表进行初始化
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL; //空链表
}

//算法功能:输出链表内容
void PrintList(LinkList L)
{
Node *p;
p=L->next; //p指向首结点
while(p!=NULL)
{
printf("%C->",p->data); //输出当前值域
p=p->next; //指针指向下一个结点
}
}

//尾插法建立单链表
void CreateFromTail (LinkList L)
{ Node *s,*r; //*s 要插入的临时结点,r指针指向尾结点
char c;
int flag=1;
r=L; //初始链表为空 ,尾r和头指针L指向相同地址
while(flag)
{ c=getchar(); //读取一个字符,回车为止,存入c
if(c!=’$’)
{ s=(Node
)malloc(sizeof(Node)); //分配存储空间
s->data=c;
r->next=s; //尾结点指向s
r=s; //移动尾指针,指向新加入的s
}
else
{ flag=0;
r->next=NULL; //结束时尾结点next置空
}
}
}

MAIN.C
#include “linklist.h”

/* 尾插法建立单链表
输入的值为(‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’),
输出创建完成后的链表
*/

int main( )
{
LinkList l; //建立一个链表,头指针l
Node *p; //结点指针p
printf(“尾插法建立单链表,请输入链表数据(字符间无需空格),以$结束!\n”) ;

InitList(&l);		//链表初始化 
CreateFromTail(l);	//调用头插法建立链表
//输出链表内容 
p=l->next;			//p指向首结点 
while(p!=NULL) 		//输出整个链表 
{
	printf("%C->",p->data);  	//输出当前值域
	p=p->next; 					//指针指向下一个结点 
} 
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值