当前位置:编程学习 > VC++ >>

一个简单的VC++问题

typedef char ElemType
typedef struct Node
{ElemType data;
struct Node * next;}Node,*Linklist;
编写Create,Inslink,Dellink,Printlink四个函数,完成尾插法创建链表,在特定位置插入节点,删除特定位置,打印链表,最后编写main函数,创建一个链表插入一个新节点,并输入链表(新节点的位置和数据域内容由用户输入),并输出链表,接下来删除一个节点并输出链表(删除节点位置由用户输入)。
小弟在这先谢谢了!
答案:
#define NULL 0            /*宏定义*/
typedef struct node /*定义结点类型的数据结构*/
{
char c; /*数据域,类型为字符型*/
struct node *next; /*指针域,类型为本结构体类型*/
}Node,*L; /*类型重定义,即Node和*L和struct node等价*/

main()
{
L l,p,q; /*用指针类型定义三个结点类型的指针*/
char ch;
int pos,n;
l=(L)malloc(sizeof(Node)); /*分配内存空间*/
l->c='\0'; /*为头结点的数据域赋值,值为空*/
l->next=NULL; /*指明下一个结点目前不存在*/
q=l; /*q为游动指针,链表结点的连结要用*/
printf("Input a character:\n");
scanf("%c",&ch);
getchar();
while(ch!='!') /*输入!表示输入结束*/
{
p=(L)malloc(sizeof(Node)); /*为新输入的数据分配内存空间*/
p->c=ch;
p->next=NULL; /*新输入的结点在链表的最后,即它的后面没有其它元素*/
q->next=p; /*q用于将上一个元素链接至当前新元素*/
q=p; /*q自己移到当前最后一个元素,以备继续链接所用*/
scanf("%c",&ch);
getchar();
}
q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/
while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/
{
printf("%c-->",q->next->c); /*q->next->c表示q所指向的下一个元素的数据*/
q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/
}

/*以上为建立一个单链表*/

printf("Input the character and its position, such as s,3\n\n");
scanf("%c,%d",&ch,&pos);
q=l;
n=1;
while(n!=pos&&q->next!=NULL) /*未找到插入位置,且后面还有元素*/
{
q=q->next;
n++;
}
/*退出循环后,要么找到插入位置,要么表已到最后,输入的插入位置过大*/

if(n<pos) /*表已读完,仍未找到插入位置*/
printf("\n\nincorrect position, insert failed\n\n");
else /*找到插入位置*/
{
/*将进行插入操作*/
p=(L)malloc(sizeof(Node)); /*给新输入的数据分配内存空间*/
p->c=ch;
p->next=q->next;
q->next=p;
}

/*操作完成,然后输出新表*/

q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/
while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/
{
printf("%c-->",q->next->c); /*q->next->c表示q所指向的下一个元素的数据*/
q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/
}
}


//All copyright are preserved bycobby
/*按内容元素删除操作*/

#include<malloc.h>
#include<stdio.h>

#define NULL 0 /*宏定义*/
typedef struct node /*定义结点类型的数据结构*/
{
char c; /*数据域,类型为字符型*/
struct node *next; /*指针域,类型为本结构体类型*/
}Node,*L; /*类型重定义,即Node和*L和struct node等价*/

main()
{
L l,p,q; /*用指针类型定义三个结点类型的指针*/
char ch;
int n;
l=(L)malloc(sizeof(Node)); /*分配内存空间*/
l->c='\0'; /*为头结点的数据域赋值,值为空*/
l->next=NULL; /*指明下一个结点目前不存在*/
q=l; /*q为游动指针,链表结点的连结要用*/
printf("Input a character:\n");
scanf("%c",&ch);
getchar();
while(ch!='!') /*输入!表示输入结束*/
{
p=(L)malloc(sizeof(Node)); /*为新输入的数据分配内存空间*/
p->c=ch;
p->next=NULL; /*新输入的结点在链表的最后,即它的后面没有其它元素*/
q->next=p; /*q用于将上一个元素链接至当前新元素*/
q=p; /*q自己移到当前最后一个元素,以备继续链接所用*/
scanf("%c",&ch);
getchar();
}
q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/
while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/
{
printf("%c-->",q->next->c); /*q->next->c表示q所指向的下一个元素的数据*/
q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/

上一个:这VC++题怎么做?
下一个:高分,VC++ SDK,界面封装

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,