#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include <stdlib.h>
#define ElementType int
typedef struct ListNode
{
ElementType data;
struct ListNode *next;
}ListNode;
typedef ListNode* List;
/*初始化链表,有头结点(增加头结点会在某些算法上变简洁)*/
void InitList(List *head)
{
*head = (List)malloc(sizeof(ListNode));
assert(*head != NULL);
(*head)->next = NULL;
}
/*创建一个链表(带头结点的头插法,逆序插入)*/
void CreateList(List *head)
{
List p,s;
ElementType x;
p = (*head);
printf("请输入要输入链表元素->");
while(scanf("%d",&x),x!=-1)
{
s = (List)malloc(sizeof(ListNode));
s->data = x;
s->next = p->next;
p->next = s;
}
}
/*创建一个链表(带头结点的尾插法,顺序插入)*/
void CreateList_tail(List *head)
{
List p,s;
ElementType x;
p = (*head);
printf("请输入要输入链表元素->");
while(scanf("%d",&x),x!=-1)
{
s = (List)malloc(sizeof(ListNode));
s->data = x;
s->next = NULL;
p->next = s;
p = s;
}
}
/*显示链表中元素*/
void ShowList(List head)
{
List p = head->next;
printf("链表中的元素有:");
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
}
void main()
{
List mylist;
InitList(&mylist);
CreateList_tail(&mylist);
ShowList(mylist);
system("pause");
}
手撕数据结构---单链表的头插尾插
最新推荐文章于 2024-07-25 19:28:17 发布