栈是一种先进后出的数据结构,数据从尾部入栈,从尾部出栈
#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,SeqList;
SeqList *L;
//初始化一张空的单链表
//注意:指针的传递也是形参,只是指向的地址是不变
//1.定义一个指针p向系统申请一段内存
//2.头节点指针指向这个内存
//3.将头节点的下一个节点指向空
int init(SeqList **head)
{
SeqList * p =malloc(sizeof(SeqList));
*head =p;
p->next=NULL;
p->data=0;
return 0;
}
//获取最后的一个节点
//1.定义一个指针p指向头节点
//2.递归比较p的next是否为空(即最后的一个节点)
//3.将当前节点的地址返回
Node * getEndNode(SeqList *head)
{
SeqList *p = head;
while(p->next!=NULL)
{
p=p->next;
}
return p;
}
//销毁一个单链表
//1.创建两个指针p,q(头节点)
//2.p,q指向头节点
//3.p指向头节点的下一个节点
//4.q的next指向头节点的下一个节点的下一个节点
//5.释放头节点的下一个节点p
//6.将p指向q(p指向头节点的下一节点)
//思想是递归删除第一个节点
void Destruction_List(SeqList **head)
{
Node *p,*q;
p=q=*head;
p=p->next;
while(p!=NULL)
{
q->next=p->next;
free(p);
p=q->next;
}
}
//向栈中插入一个数据,尾插法
//1.定义一个指针p
//2.p指向头节点
//3.获取最后一个节点
//4.将p的next节点申请一块内存
//5.填充数据
int put(SeqList **head)
{
Node *p=*head,*q;
if(p==NULL)
{
return -1;
}
printf("Plese Input data:\n");
p=getEndNode(*head);
p->next=(Node *)malloc(sizeof(Node));
scanf("%d",&p->next->data);
// p->next->data = i;
p->next->next=NULL;
// head->next=p;
}
//弹出最后节点
Node* pop(SeqList **head)
{
Node *p,*q;
p=*head;
if(p->next==NULL)
{
return NULL;
}
/* q=p->next;
p->next=q->next;*/
while(p->next->next!=NULL)
{
p=p->next;
}
q=p->next;
p->next=NULL;
return q;
}
void show_List(SeqList *head)
{
SeqList *p =head->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
Node * findNode(SeqList *head,int data)
{
Node *p=head;//p指向头节点
p=p->next;//指向第一个节点
while(p!=NULL)
{
// printf("p:%d\n",p->data);
if(p->data==data)
{
return p;
}
else
{
p=p->next;
}
}
return NULL;
}
int main()
{
init(&L);
int i;
for(i=0;i<5;i++)
put(&L);
show_List(L);
Node *n = pop(&L);
printf("pop data: %d\n",n->data);
/ free(n);
show_List(L);
if(L->next==NULL)
{
printf("SeqList is NULL\n");
}
show_List(L);
//printf("L p:%p",L->next);
n = findNode(L,5);
if(n!=NULL)
{
printf("find data is:%d\n",n->data);
}
else
{
printf("data is NULL\n");
}
Destruction_List(&L);
show_List(L);
return 0;
}
评论