if(ht[i].data==st[j])
{
for(k=hcd[i].start;k<=n;k++)
{
bm[t]=hcd[i].bits[k];
t++;
}
break;
}
}
bm[t]='\0';
printf("发送完毕!
\n");
break;
case4:
printf("接收到的编码信息为:
");
puts(bm);
printf("译码后的结果为:
");
TsCode(bm,ht,n);
printf("\n");
break;
case0:
exit(0);
}
}
}
链表建立
#include;
typedefstruct{
charnum[8];/*学号*/
charname[9];/*姓名*/
chargender[3];/*性别*/
intscore;/*成绩*/
}DataType;
typedefstructnode{
DataTypedata;
structnode*next;
}ListNode;
typedefListNode*LinkList;
LinkListhead;
/*函数说明*/
intmenu_select();
LinkListcreateList(void);
voidprintList(LinkListhead);
ListNode*findList(LinkListhead);
intinsertNode(LinkListhead,ListNode*p,inti);
voiddelNode(LinkListhead);
voidmain()
{
ListNode*p;
inti;
while
(1){
switch(menu_select())
{
case1:
printf("**************************************\n");
printf("学生信息链表的建立\n");
printf("***************************************\n");
head=createList();
break;
case2:
printf("**************************************\n");
printf("添加学生信息\n");
printf("**************************************\n");
printf("\n学号(8)姓名(8)性别成绩\n");
printf("**************************************\n");
p=(ListNode*)malloc(sizeof(ListNode));
scanf("%s%s%s%d",p->data.num,p->data.name,p->data.gender,&p->data.score);
printf("请输入要插入的位置:
\n");
fflush(stdin);
scanf("%d",&i);
if(insertNode(head,p,i)==-1)
{
printf("没有合适的插入点!
\n");
}
else
{
printf("结点已经插入\n");
}
break;
case3:
printf("**************************************\n");
printf("查询学生信息\n");
printf("**************************************\n");
p=findList(head);
if(p!
=NULL)
{
printf("\n学号(8)姓名(8)性别成绩\n");
printf("-------------------------------------------\n");
printf("%s,%s,%s,%d\n",p->data.num,p->data.name,p->data.gender,p->data.score);
printf("------------------------------------------------------------------\n");
}
else
printf("没查到要查询的学生信息!
");
break;
case4:
printf("**************************************\n");
printf("删除学生信息\n");
printf("**************************************\n");
delNode(head);
break;
case5:
printf("**************************************\n");
printf("输出所有学生信息\n");
printf("**************************************\n");
printList(head);
break;
case0:
printf("再见!
\n");
getch();
return;
}
}
}
intmenu_select()
{
intsn;
printf("\n学生信息管理系统\n");
printf("=========================================\n");
printf("1.学生信息链表的建立\n");
printf("2.插入学生信息\n");
printf("3.查询学生信息\n");
printf("4.删除学生信息\n");
printf("5.输出所有学生信息\n");
printf("0.退出管理系统\n");
printf("==========================================\n");
printf("请选择0-5:
\n");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>5)
printf("\n\t输入错误,重选0-5\n");
else
break;
}
returnsn;
}
LinkListcreateList(void)
{
ListNode*p,*rear;
charflag='y';
head=(ListNode*)malloc(sizeof(ListNode));
rear=head;
while(flag=='y'||flag=='Y')
{
p=(ListNode*)malloc(sizeof(ListNode));
printf("\n学号(8)姓名(8)性别成绩\n");
scanf("%s%s%s%d",p->data.num,p->data.name,p->data.gender,&p->data.score);
rear->next=p;
rear=p;
printf("继续输入吗?
(y/n):
");
flag=getch();
}
rear->next=NULL;
returnhead;
}
voidprintList(LinkListhead)
{
ListNode*p;
p=head->next;
printf("\n学号(8)姓名(8)性别成绩\n");
printf("-------------------------------------------\n");
while(p!
=NULL)
{
printf("%s,%s,%s,%d\n",p->data.num,p->data.name,p->data.gender,p->data.score);
printf("------------------------------------------------------------------\n");
p=p->next;
}
}
ListNode*findList(LinkListhead)
{
ListNode*p;
charnum[8];
charname[9];
intxz;
printf("===========================\n");
printf("1、按学号查询\n");
printf("2、按姓名查询\n");
printf("===========================\n");
printf("请选择:
");
p=head->next;
scanf("%d",&xz);
if(xz==1)
{
printf("请输入要查找学生的学号:
");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)!
=0)
p=p->next;
}
else
if(xz==2)
{
printf("请输入要查找学生的姓名:
");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
}
returnp;
}
intinsertNode(LinkListhead,ListNode*p,inti)
{
ListNode*p1;
intj=1;
p1=head;
if(p1->next==NULL)/*空表:
插入作为第一个结点*/
{
if(i==0)
{
p1->next=p;
p->next=NULL;
}
else
return-1;
}
while((j<=i-1)&&(p1!
=NULL))/*找到第i-1个结点,p1指向该结点*/
{
p1=p1->next;
j++;
}
if(p1==NULL)/*没有合适的插入点*/
return-1;
p->next=p1->next;
p1->next=p;
return0;
}
voiddelNode(LinkListhead)
{
ListNode*p,*q;
printf("请先查找您要删除的学生信息:
\n");
p=findList(head);
if(p==NULL)
{
printf("没有查到要删除的学生信息");
return;
}
q=head;
while(q!
=NULL&&q->next!
=p)q=q->next;
q->next=p->next;
free(p);
printf("该学生信息已被删除!
\n");
}
图:
#include
#include
#include
#definemaxlen10
#definelarge999
#definetrue1
#definefalse0
#defineok1
#defineerror0
#defineoverflow-2
#definenull0
typedefintstatus;
typedefstruct
{
inta[maxlen],b[maxlen],h[maxlen];/*第K边的起点,终点,权值*/
charvexs[maxlen];/*顶点信息集合*/
intvexnum,arcnum;/*顶点数和边数*/
intkind;/*图的类型*/
intarcs[maxlen][maxlen];/*邻接矩阵*/
}graph;
typedefstructnode/*表结点结构*/
{
intadjvex;/*存放与头结点相邻接的顶点在数组中的序号*/
intinfo;/*权值*/
structnode*next;/*指向与头结点相邻接下一个顶点的表结点*/
}edgenode;
typedefstruct/*头结点结构*/
{
intid;/*顶点入度*/
chardata;/*顶点信息*/
edgenode*link;/*指向头结点对应的单链表中的表结点*/
}vexnode;
typedefstruct/*邻接表结构*/
{
vexnodeadjs[maxlen];/*邻接表的头结点集合*/
intvexnum,arcnum;/*顶点数,边数*/
intkind;
}adjlist;
typedefstructqnode/*队列存储结构*/
{intdata;
structqnode*next;
}linkqlist;
typedefstruct
{linkqlist*front;/*队头指针*/
linkqlist*rear;/*队尾指针*/
}linkqueue;
typedefstruct/*栈结构*/
{intstack[maxlen];
inttop;
}stackstru;
intcnull=-1;
graphg;
adjlistadjl;
stackstru*t;/*拓扑序列顶点栈*/
stackstru*s;/*零入度顶点栈*/
linkqueue*q;
graphprintf_adjmatrix(graphg)/*输出邻接矩阵*/
{
inti,j;
printf("邻接矩阵:
\n");
printf("vertex\t");
for(i=0;iprintf("\n");
for(i=0;i{printf("%4c\t",g.vexs[i]);
for(j=0;jprintf("\n");
}
returng;
}
voidcreate_1(graphg)
{
inti,j,