if(p==NULL)/*如果插入空表*/ { p=r; r->next=NULL; printf(\ }
else
{ while(x>p->sid) /*找到插入的位置,按学号大小。(找到位置或者到了表尾都会跳出循环)*/ { if(p->next==NULL)break; p=p->next; } if(x
printf(\ else /*插到末尾*/ { p->next=r; r->next=NULL; printf(\ } }
return head; }
stu *get(stu *head,int n) /*得到位置为n的结点的指针*/ { stu *p;int i; p=head->next; if(n==0) return head; else { for(i=1;i
stu *delete(stu *head,int sid) { stu *p,*q;int temp=0,i=0; p=head->next; if(!p)
36
{ printf(\ press eny key back.\表空*/ else { while(p) /*查找学号为sid的结点的指针*/ {i++; /*标记学号为sid的结点的位置*/ if(p->sid==sid) {temp=1;break;} /*temp=1标记找到了*/ p=p->next; } if(temp==1) /*如果有学号为sid的结点*/ { q=get(head,i-1);/*得到sid的前一个结点的指针*/ q->next=p->next; free(p); printf(\ return head; } else /*没有找到*/ { printf(\ return head; } } }
void print(stu *head) { stu *p; p=head->next; if(!p){printf(\ press eny key back.\ while(p) { printf(\ p=p->next; } }
main() { stu *p1,*p2; char ch1; int n,i=0,j=0; head=create(); do {clrscr(); printf(\ \ printf(\ printf(\ printf(\ \
37
printf(\ \ printf(\ ............choice (1-5).............\ ch1=getch(); switch(ch1) { case '1': { clrscr(); printf(\ scanf(\ head=insert(head,i,j); printf(\ break; } case '2': { clrscr(); printf(\ \ scanf(\ p1=select(head,n); { if(p1) printf(\ else printf(\ } printf(\ break; } case '3': { clrscr();printf(\ \ scanf(\ head=delete(head,n); printf(\ break; } case '4': { clrscr(); printf(\ print(head); printf(\ break; } case '5': return; default: printf(\ press eny key back.\ }
}while(n); }
38
7、
#include
struct list *next; }L;
L *set_list()
{ L *head,*p1,*p2; char c; int n=0;
head=(L *)malloc(F); head->next=0; /*建立链表*/ p1=p2=head;
printf(\ scanf(\ while(c!='*') { n++; if(n==1) p1->data=c; else
{ p1=(L *)malloc(F); p1->data=c; p2->next = p1; p2 = p1;
p1->next = 0; }
scanf(\ }
p1=head; while(p1)
{ printf(\ \ } printf(\ return head; }
void change_list(L *head1) /*算法:p2指向最后一个元素,p1指向第一个元素。交换他们的值,p1,p2同时往中间靠拢。*/ { L *p1,*p2,*p3; int i,j,k,n=1; char temp;
p1=head1;p2=head1;p3=head1; while(p3->next)
{ p3=p3->next;n++; }/*求链长*/
for(i=n;i>(n/2);i--) /*外循环使p1后移,p2前移。*/ { p2=head1;
39
for(j=1;jnext; /*p2指向最后一个元素*/ temp=p1->data;p1->data=p2->data;p2->data=temp;/*交换他们的值*/ p1=p1->next;/*p1向后移*/ }
while(head1)
{ printf(\ \ } }
void main() { L *head; head=set_list(); change_list(head); getch(); }
第十章
1: 答: 共用体使几种不同类型的值存放在同一内存区域中。 例如, 把一个整型值和字符值放在同一个存储区域, 既能以整型存储, 又能以字符存储。共用体类型的定义形式与结构体的定义形式相同, 只是其类型关键字不同,共用体的关键字为union.一般 形式为:
union 共用体类型名 { 成员列表
};
例如: union data { int i; char ch; float f;
};
2: 答: 共用体不同与结构体,某一时刻,存与共用体的只有一种数据,而结构体是所有成分都存储着的。即共用体是几种数据值的覆盖存储,几种不同类型的数据值从同一地址开始存储,但是任一时刻只能存储其中一种数据,而不是同时存储多种数据。分配给共用体的存储区域大小至少要有存储其中最大的一种数据所需要的存储空间量。
3: 答: 在实际应用中,有的变量只有几种可能的取值。如表示颜色的名称,表示月份的名称等。为了提高程序描叙问题的直观性,ANSI C引入允许程序员定义枚举类型的机制。程序用枚举方法
40