简单链表与结构体

简单链表与结构体
主要包括节点与链表的生成,节点的插入与删除,链表的清空。
#include
#include <malloc.h>
typedef struct node{ //结构体的创建
int date;
struct node* next;
}node;

void print(node* p){ //打印函数
while(p!=NULL){
printf("%d\n",p->date);
p=p->next;
}
}

node* createnode(int i){ //创建节点
node* newnode=(node*)malloc(sizeof(node));
newnode->date=i;
// scanf("%d",&newnode->date);
newnode->next=NULL;
return newnode;
}

void createlink(node** head,node** tail){ //创建链表
for(int i=0;i<5;i++){
node* newnode=createnode(i);

	if((*head)==NULL)
		(*head)=newnode;
	else
		(*tail)->next=newnode;
	(*tail)=newnode;
} 

}

void findnode(node** p,int x){ //寻找节点
while((*p)->date!=x){
(*p)=(*p)->next;
}
}

void insertmiddle(node** head,int x,int y){ //中间插入
node* p=head;
findnode(&p,x);
node
newnode=createnode(y);
newnode->next=p->next;
p->next=newnode;
}

void inserthead(node** head,int x){ //头部插入
node* newnode=createnode(x);
newnode->next=(*head);
(*head)=newnode;
}

void inserttail(node** tail,int x){ //尾部插入
node* newnode=createnode(x);
(*tail)->next=newnode;
(*tail)=newnode;
}

void deletemid(node** head,int x){ //中间删除
node* p=(head);
node
pre=(*head);
while(p->date!=x){
pre=p;
p=p->next;
}
if(p->next!=NULL){
pre->next=p->next;
free§;
}
}

void deletehead(node** head){ //头部删除
node* p=(*head);
(*head)=(*head)->next;
free§;
}

void deletetail(node** head,node** tail){ //尾部删除
node* p=(head);
node
pre=(*head);
while(p!=*tail && p->next!=NULL){
pre=p;
p=p->next;
}
pre->next= p->next;
free§;
(*tail) = pre;
}

void cancel(node* head){
node* p=head;
node* pre =head;
while(pre!=NULL){
pre = p->next;
free§;
p=pre;
}
printf("%d",p);
}
int main(int argc, char** argv){
node* tail=NULL;
node* head=NULL;
createlink(&head,&tail);
insertmiddle(&head,2,666);
inserthead(&head,999);
inserttail(&tail,-999);
print(head);
printf("\n");
deletemid(&head,666);
deletehead(&head);
deletetail(&head,&tail);
print(head);
printf("
\n");
cancel(head);
}`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值