/*
结点0为头结点,不保存有意义的数据;从结点1开始保存有意义的数据
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}NODE,* PNODE;
PNODE create_list(); //创建一个新链表
void show_list(PNODE); //遍历显示链表
void add(PNODE ); //添加元素:即在链表末尾添加元素
void insert(PNODE p); //插入元素,在节点pos位置的后面插入一个节点,数据为a,pos可以为0
int getlen(PNODE ); //求链表的长度
int main()
{
PNODE phead = NULL;
phead = create_list();
show_list(phead);
printf("链表的长度是:%d \n",getlen(phead));
add(phead);
show_list(phead);
insert(phead);
show_list(phead);
printf("链表的长度是:%d\n",getlen(phead));
return 0;
}
PNODE create_list()
{
int i;
int len;
printf("请输入创建链表的长度:\n");
scanf("%d",&len);
PNODE phead = (PNODE)malloc(sizeof(NODE));
PNODE ptail; //指向最后一个节点
ptail = phead;
ptail->next=NULL;
for(i=1;i<len+1;i++)
{
PNODE pnew = (PNODE)malloc(sizeof(NODE));
printf("input value of node %d :",i);
scanf("%d",&(pnew->data));
ptail->next = pnew;
pnew->next = NULL;
ptail = pnew;
}
return phead;
}
int getlen(PNODE p)
{
int len = 0;
PNODE ptr = p->next;
while(ptr != NULL)
{
len++;
ptr = ptr->next;
}
return len ;
}
void show_list(PNODE p)
{
PNODE ptr = p->next;
while(ptr != NULL)
{
printf("%d ",ptr->data) ;
ptr = ptr->next;
}
printf("\n");
return;
}
void add(PNODE p)
{
int val;
printf("输入要添加的的值\n");
scanf("%d",&val);
PNODE ptail = p;
while(ptail ->next !=NULL)
{
ptail=ptail->next;
}
PNODE pnew = (PNODE)malloc(sizeof(NODE));
pnew->next = NULL;
pnew->data = val;
ptail->next = pnew;
return ;
}
void insert(PNODE p)
{
int pos;
int a;
PNODE ptr = p;
printf("请输入插入的位置: \n");
scanf("%d",&pos);
if((pos < 0) || (pos >getlen(p)))
{
printf("the position is error \n");
exit(-1);
}
while(pos != 0)
{
ptr = ptr->next;
pos --;
}
printf("请输入插入的值: \n");
scanf("%d",&a);
PNODE pnew = (PNODE)malloc(sizeof(NODE));
pnew->data = a;
pnew->next = ptr ->next;
ptr->next = pnew;
return;
}
链表的操作
最新推荐文章于 2024-09-20 21:32:51 发布