1. 键盘输入一组数字,用单链表形式存储,输入完成后分别按顺序和逆序输出所输入数字。
楼主你好
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 80
typedef struct node
{
int data;
struct node *next;
}N;
N *head=(N *)malloc(sizeof(N));//创建头结点
void Creat()
{
N *p;//用于插入新节点
N *r=head;//尾指针 开始指向头结点
printf("请输入任意个数据(用回车结束输入、空格间隔:1 2 3……)\n:");
do{
p=(N *)malloc(sizeof(N));
scanf("%d",&p->data);
r->next=p;
r=p;
}while(getchar()!='\n');
r->next=NULL;
}
void Disp()//实现顺序输出和逆序输出
{
N *p=head->next;//用于遍历单链表
int a[MAX];
int i=0,j;
printf("顺序输出:\n");
while(p)
{
printf("%d ",p->data);
a[i]=p->data;
p=p->next;
i++;
}
printf("\n逆序输出:\n");
for(j=i-1;j>=0;j--)
printf("%d ",a[j]);
printf("\n");
}
void main()
{
Creat();
Disp();
}
希望能帮助你哈
2. 用链表的形式存储一个字符串 按正序和逆序输出字符串(数据结构考试)
这个字符串的输出,考虑到有正序和逆序,采用链表,可以考虑用双链表。这样输出效率会比较高。
建议用循环双链表(带头结点),方便程序处理,简化操作流程,步骤明晰,便于调试。
关键函数可分为:
1,结构的定义
2,初始化链表
3,输出(正序,逆序)
4,释放链表
5,主函数
以下C语言代码在VC6.0中编译通过:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
/*定义*/
typedefstructnode
{
charc;
structnode*llink,*rlink;
}stud;
/*建立链表*/
stud*creat(void)
{
stud*p,*h,*s;
chara;
if((h=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->c=0;
h->llink=NULL;
h->rlink=NULL;
p=h;
while(1)
{
a=getchar();
if(a==' ')
break;
if((s=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->rlink=s;
s->c=a;
s->llink=p;
s->rlink=NULL;
p=s;
}
h->llink=s;
p->rlink=h;
return(h);
}
/*正序*/
voidprint1(stud*h)
{
stud*p;
p=h->rlink;
printf("字符串(正序):");
while(p!=h)
{
printf("%c",p->c);
p=p->rlink;
}
printf(" ");
}
/*逆序*/
voidprint2(stud*h)
{
stud*p;
p=h->llink;
printf("字符串(逆序):");
while(p!=h)
{
printf("%c",p->c);
p=p->llink;
}
printf(" ");
}
/*释放*/
voidfree_stud(stud*h)
{
stud*p,*q;
p=h->llink;
while(p!=h)
{
q=p;
p=p->llink;
free(q);
}
free(h);
}
/*主函数*/
intmain()
{
stud*head=NULL;
head=creat();
print1(head);
print2(head);
free_stud(head);
return0;
}