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;
}