建立一个链表,从键盘输入字符,当输入字符0时停止输入,输出输入的字符。C语言编
我以前写过一个小程序,其中有一部分就是这个
#include<stdio.h>
#include<malloc.h>
typedef struct list
{
int number;
struct list *link;
}linklist, Node;
linklist *creatlist1(linklist *head);//首插创建链表
linklist *creatlist2(linklist *head);//尾插创建链表
void showlist(linklist*);
int main()
{
linklist *head;
int i,j,k,l,m,n,s;
head=(linklist*)malloc(sizeof(Node));
head->link=NULL;
creatlist1(head);
showlist(head);
creatlist2(head);
showlist(head);
return 0;
}
//从前面插入元素创建链表
linklist *creatlist1(linklist *head)
{
Node *p;
int x;
printf("【在链表头部插入结点】\n请输入要插入的数字,当输入0时结束:\n");
int flag=1;
while(flag)
{
scanf("%d",&x);
if(x!=0)
{
p=(Node*)malloc(sizeof(Node));
p->number=x;
p->link=head->link;
head->link=p;
}
else flag=0;
}
return head;
}
//从后面插入元素创建链表
linklist *creatlist2(linklist *head)
{
Node *p,*q;
q=head;
int i=0;
while(q->link!=NULL)
{
q=q->link;
}
int x,flag=1;
printf("【在链表尾部插入结点】\n请输入要插入的数字,当输入0时结束:\n");
while(flag)
{
scanf("%d",&x);
if(x!=0)
{
p=(Node*)malloc(sizeof(Node));
p->number=x;
q->link=p;
q=p;
}
else
{
flag=0;
q->link=NULL;
}
}
return head;
}
void showlist(linklist *head)
{
Node *p;
p=head->link;
printf("链表中的元素为:\n");
while(p!=NULL)
{
printf("%d\t",p->number);
p=p->link;
}
printf("\n");
}
那个数字可以往前插,也可以往后插,都写了,运行结果为:
#include <stdlib.h>
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild;//左孩子指针
struct BiTNode *rchild;// 右孩子指针
}BiTNode;
typedef BiTNode *BiTree;
Status CreateBiTree(BiTree &T)
{//按给定的带空指针标记的先序序列建二叉链表
char ch;
int i;
//for (i=1;i<=50;i++)
{
ch=getchar();
if (ch==13 || ch==''|| ch<'0' || ch>'9')
{
if (i==1) printf("请输入有效数字");
return ;
}
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
}
return OK;
} // CreateBiTree
void Display(TElemType& e)
{
printf("%c\t",e);
}
void InOrderTraverse (BiTree T, void( *visit)(TElemType& e))
{ // 先序遍历二叉树
if (T==NULL) return;
InOrderTraverse(T->lchild, visit); // 遍历左子树
visit(T->data); // 访问根结点
InOrderTraverse(T->rchild, visit); // 遍历右子树
}
void main()
{
BiTree R;
printf("输入带空指针标记的先序序列:(例如ABCD )\n");
CreateBiTree(R);
printf("该二叉树的中序序列为:\n");
InOrderTraverse(R,Display);
printf("\n");
}
#include<stdlib.h>
struct node
{
char a;
struct node *next;
};
void main()
{
struct node *head,*tail,*p,*q;
head=tail=NULL;
p=(struct node *)malloc(sizeof(struct node));
printf("请从键盘上任意输入一个字符:");
scanf("%c",&p->a);
while(p->a!='0')
{
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
p=(struct node *)malloc(sizeof(struct node));
printf("请再次任意输入一个字符:");
scanf("%c",&p->a);
}
q=head;
for(;q!=NULL;q++)
{
printf("%c",q->a);
}
}