链表实现栈的出栈以及入栈:
首先创建一个头结点并初始化:
头结点建立代码:
typedef struct Node{
int data;
struct Node* next;
}Node;
void InitLinkList(Node *L)
{
L->next=NULL;
}
int main()
{
Node L;
InitLinkList(&L)
}
插入节点过程:头插法
代码:
void HeadInsert(Node *L,int x)
{
Node *p=(Node*)malloc(sizeof(Node));//申请节点p
p->data=x;//赋值p
p->next=L->next;//申请的节点指向头结点的下一个节点
L->next=p;//头结点指向新节点
}
出栈就用头删法:
代码:
void Pop_head_delete(Node *L)
{
Node *p=L->next;
L->next=p->next;
free(p);
}
所有代码:
#include<stdio.h>
#include<malloc.h>
typedef struct Node{
int data;
struct Node* next;
}Node;
void InitLinkList(Node *L)
{
L->next=NULL;
}
void print(Node *L)//输出表中内容
{ Node *p=L->next;
while(p!=NULL)
printf("%d-->",p->data),p=p->next;
printf("NULL\n");
}
void HeadInsert(Node *L,int x)
{
Node *p=(Node*)malloc(sizeof(Node));//申请节点p
p->data=x;//赋值p
p->next=L->next;//申请的节点指向头结点的下一个节点
L->next=p;//头结点指向新节点
}
void Pop_head_delete(Node *L)
{
Node *p=L->next;//p节点指向头节点的下一个节点(第一个数据节点)
L->next=p->next;//头结点指向p的下一个节点;
free(p);//释放p节点。
}
int main()
{
Node L;
InitLinkList(&L);
for(int i=1;i<10;i++)
HeadInsert(&L,i);//入栈10个数
print(&L);
Pop_head_delete(&L);//出1个数
print(&L);
}
结果:
9-->8-->7-->6-->5-->4-->3-->2-->1-->NULL
8-->7-->6-->5-->4-->3-->2-->1-->NULL
--------------------------------
Process exited after 0.02699 seconds with return value 0