#inlcude <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}*LinkList;
LinkList Init_LinkList()
{
LinkList L;
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
return L;
}
//头插法
void GreateFromHead(LinkList L)
{
LinkList s;
char c;
//获得元素不是换行就执行
while((c = getchar())!='\n')
{
//空格字符不存入单链表
if(c != ' ')
{
s = (LinkList)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
}
}
LinkList Get(LinkList L, int i)
{
int j = 0;
LinkList p = L;
//查找元素不合法
if(i <= 0) return NULL;
//查找第i个元素
while(p->next != NULL && j < i)
{
j++;
p = p->next;
}
//若存在该节点返回该节点
if(p != NULL) return p;
//否则返回NULL
else return NULL;
}
int ListLength(LinkList L)
{
int j = 0;
LinkList p;
p = L->next;
while(p != NULL)
{
p = p->next;
j++;
}
return j;
}
int main()
{
LinkList L;
LinkList p, q;
int location, length;
//线性表初始化
L = Init_LinkList();
//头插法输入节点
printf("用头插法建立单链表,输入单链表数据(换行结束):\n");
GreateFromHead(L);
//输出当前单链表
printf("带头结点的单链表为:\n");
p = L->next;
while(p != NULL)
{
printf("%c ", p->data);
p = p->next;
}
//输出单链表长度(元素个数)
length = ListLength(L);
printf("\n该单链表的长度为:%3d\n", length);
//查找第i个位置元素
printf("请输入要查找单链表位置:");
scanf("%d", &location);
q = Get(L, location);
if(q == NULL) printf("查找元素位置不合法\n");
else printf("要查找的单链表的元素为:%3c\n", q->data);
return 0;
}
单链表头插法实现及元素查找
最新推荐文章于 2024-01-20 17:44:52 发布