Description
新建一个栈,读取标准输入3个整数3 4 5,入栈3 4 5,依次出栈,打印 5 4 3,新建循环队列(Maxsize为5),读取标准输入3 4 5 6 7,入队7时,队满,打印false,然后依次出队,输出 3 4 5 6
Input
读取标准输入,内容依次是3 4 5,换行后,接着是3 4 5 6 7
Output
如果输入是3 4 5,换行,接着是3 4 5 6 7,那么输出是
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType ;
typedef struct LNode
{
ElementType data;//数据域
struct LNode *next;//指针域
//一个内容包含有数据和next指针
}LNode,*LinkList;
void list_tail_insert(LNode *&L)//LNode *和LinkList等价
{
L = (LNode *) malloc(sizeof(LNode));//申请头节点空间
LNode *s,*r=L;//申请新的结点,让r的地址与L地址相同,指向同一个地方,同时都指向头节点
ElementType x;
scanf("%d", &x);
while (x != 9999) {
s = (LNode *) malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d", &x);
}
r->next=NULL;
}
LinkList get_elem_val(LinkList L,int search_pos)
{
int i=0;
if(search_pos==0)
{
return L;
}
if(search_pos<0){
return NULL;
}
while(L&&i<search_pos)
{
L=L->next;//指向下一个值的地址
i++;
}
return L;
}
bool delete_elem(LinkList L,int i)//加不加引用取决与于L(首地址)会不会改变 比如头插法尾插法是为L分配空间的,形成头结点
{
LinkList p=get_elem_val(L,i-1);
if(NULL==p)
{
return false;
}
LinkList q=get_elem_val(L,i);
p->next=q->next;
free(q);
return true;
}
bool insert_elem(LinkList L,int i,ElementType e)
{
LinkList p=get_elem_val(L,i-1);//获取i-1的地址
if(NULL==p)
{
return false;
}
LinkList q;
q=(LNode *) malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
return true;
}
void Print(LinkList L)
{
L=L->next;//L是指向头节点的,头结点里面是没有值的,所以需要从下一个结点,也就是a1开始
while(L)
{
printf("%3d",L->data);
L=L->next;
}
printf("\n");
}
int main()
{
LinkList L;
list_tail_insert(L);
LinkList ret;
ret= get_elem_val(L,2);
if (ret)
{
printf("%d\n",ret->data);
}
insert_elem(L,2,99);
Print(L);
delete_elem(L,4);
Print(L);
}