#include<stdio.h>
#include<malloc.h>
typedef struct node
{
struct node *next;
int num;
}Node,*PNode;
PNode init_linkList();
PNode create_linkList(PNode head);
void traversal_linkList(PNode head);
int getSize(PNode head);
int insert(PNode head,int pos,int val);
int rem(PNode head,int pos);
int main(){
PNode head = NULL;
printf("%p\n",head);
head = init_linkList();
printf("%p\n",head);
create_linkList(head);
traversal_linkList(head);
insert(head,2,999);
traversal_linkList(head);
rem(head,5);
traversal_linkList(head);
}
//初始化链表
PNode init_linkList()
{
PNode head = NULL;
printf("链表初始化开始!\n");
head = (PNode) malloc(sizeof(Node));//头结点
if(head == NULL)
{
printf("内存分配失败,初始化失败!\n");
}
head->next = NULL;
printf("链表初始化成功!\n");
return head;
}
//创建链表
PNode create_linkList(PNode head)
{
PNode tail = NULL;//尾指针,始终指向链表的尾节点
PNode p = NULL;
int i ;
printf("创建列表开始:\n");
tail = head;
printf("请输入一个数字:\n");
while(scanf("%d",&i)!=EOF)
{
p= (PNode) malloc(sizeof(Node));
p->num=i;
tail->next=p;
tail=p;
tail->next=NULL;
printf("请输入一个数字:\n");
}
printf("创建列表结束!\n");
return head;
}
//遍历链表
void traversal_linkList(PNode head)
{
PNode p = NULL;
p = head;
printf("遍历列表开始:\n");
while(p->next!=NULL)
{
printf("%d\n",p->next->num);
p=p->next;
}
printf("遍历列表结束!\n");
}
//在链表中的指定位置插入一个元素
int insert(PNode head,int pos,int val)
{
int i,length;
PNode p = head;
PNode q = NULL;
printf("插入元素开始:\n");
length = getSize(head);
if(pos>length+1 || pos<1)
{
printf("位置错误!\n");
printf("插入元素失败!\n");
return 0;
}
for(i = 0; i<pos-1; i++)
{
p=p->next;
}
if(p==NULL)
{
printf("位置错误!\n");
printf("插入元素失败!\n");
return 0;
}
q = (PNode) malloc(sizeof(Node));
q->num=val;
q->next = p->next;
p->next = q;
printf("插入元素成功!\n");
return 1;
}
//在链表中删除某个位置的元素
int rem(PNode head,int pos)
{
int i,length;
PNode p = head;
printf("删除元素开始:\n");
length = getSize(head);
if(pos>length || pos<1)
{
printf("位置错误!\n");
printf("删除元素失败!\n");
return 0;
}
for(i = 0; i<pos-1; i++)
{
p=p->next;
}
if(p==NULL)
{
printf("位置错误!\n");
printf("删除元素失败!\n");
return 0;
}
p->next=p->next->next;
printf("删除元素成功!\n");
return 1;
}
//获取链表长度
int getSize(PNode head)
{
PNode p = head;
int length=0;
printf("获取列表长度:\n");
while(p->next!=NULL)
{
length++;
p=p->next;
}
printf("获取列表长度成功\n");
return length;
}
数据结构之单链表(对单链表的所有操作)
最新推荐文章于 2022-04-21 23:32:49 发布