大家帮忙填写完整需要填写完整的地方。然后最后运行的8个选项再添加1~2个。添加写比如(查询。保存等)谢谢
#include <stdio.h> /*线性链表实验*/#include <stdlib.h>
typedef char DataType; /*在此例中数据类型采用字符类型*/
typedef struct node
{ DataType data;
struct node *next;
}LNode;
LNode *head; /* head 表示人为增加的头结点 head是全局变量 指向头结点*/
void CreatLinkList()
{ LNode *p,*s;
char x;
int z=1; /*控制循环*/
head=(LNode *)malloc(sizeof(LNode)); /* 为头结点申请分配内存 */
head->next=NULL;
p=head;
printf("\n\t\t\t建立一个线性表");
printf("\n\t\t\t说明:请逐个输入字符,结束标记为'#'!\n");
while(z)
{
printf("\t\t\t输入:");
scanf("%c",&x);
getchar();
if(x!='#')
{ s=(LNode *)malloc(sizeof(LNode)); /*为结点申请分配内存*/
s->data=x;
s->next=p->next;
p->next=s;
p=s;}
else z=0;
}
}
int LenLinkList()
{ int n=0;
LNode* p=head; /* p指向头结点*/
while (p->next)
{ p=p->next; n++; } /* p所指的是第 n 个结点*/
return n;
}
void InsertLinkList(int i,char x)
/* 在线性表L的第 i 个位置上插入一个值为 x 的新元素
1<=i<=表长加一为合法插入位置*/
{ int j;
LNode *s,*p;
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
if(i<1)
{
printf("\n\t\t\t插入位置不合法!\n");
free(s);
return;
}
else
{ j=0;
p=head;
while(p!=NULL && j<i-1) /*寻找插入位置*/
{ j++;
p=p->next;
}
if(p!=NULL)
{ s->next=p->next;
p->next=s;
}
else
{
printf("\n\t\t\t未找到插入位置!\n");
free(s);
return;
}
}
}
void DeleteLinkList(int i)
{ LNode *p,*q;
int j=0;
if(head->next==NULL) printf("\n\t\t\t链表为空没有元素可以删除!\n");
if (i<1)
{
printf("\n\t\t\t位置不合法\n");
return;
}
p=head;
while (p->next && j<i-1)
{ p=p->next; j++;} /*循环直到p指向第i-1个元素*/
if (!(p->next) || j>i-1)
{
printf("\n\t\t\t没找到要删除的位置\n");
return; /*删除结点不合法*/
}
q=p->next; p->next=q->next; /*删除第i个数据元素*/
free(q); /*释放第i个数据元素所占内存*/
}
int SearchLinkList(DataType x)
/*在线性表中查找值为x的数据元素*/
{int y;
printf("\t\t\需要填写的地方!\n");
return y;
}
DataType GetfromLinkList(int i)
/*返回线性表中的第i个元素的值*/
{DataType l;
printf("\t\t\t需要填写的地方!\n");
return l;
}
void ShowLinkList()
{ LNode *p=head;
printf("\n\t\t\t显示线性表的所有元素:");
if(head->next==NULL)
printf("\n\t\t\t链表为空!\n");
else
{
printf("\n\t\t");
while(p->next!=NULL)
{ printf("\t%c",p->next->data);
p=p->next;
}
}
}
/* 主函数 */
main()
{ char choice;
int i,j=1;
DataType x;
while(j)
{ printf("\n\n\n\n");
printf("\t\t\t--线 性 链 表--\n");
printf("\n\t\t\t************************************");
printf("\n\t\t\t* 1-------建 表 *");
printf("\n\t\t\t* 2-------插 入 *");
printf("\n\t\t\t* 3-------删 除 *");
printf("\n\t\t\t* 4-------求 表 长 *");
printf("\n\t\t\t* 5-------按 值 查找 *");
printf("\n\t\t\t* 6-------读取元素值 *");
printf("\n\t\t\t* 7-------显示线性表 *");
printf("\n\t\t\t* 0-------退 出 *");
printf("\n\t\t\t************************************\n");
printf("\t\t\t请选择菜单号(0--7):");
scanf("%c",&choice);getchar();
if(choice=='1')
CreatLinkList();
else if (choice=='2')
{ printf("\n\t\t\t请输入的位置i和数值x(输入格式:i,x):");
scanf("%d,%c",&i,&x);
InsertLinkList(i,x);}
else if (choice=='3')
{ printf("\n\t\t\t请输入要删除元素的位序:");
scanf("%d",&i);
DeleteLinkList(i);}
else if (choice=='4')
{ printf("\t\t\t表长为: %d\n",LenLinkList());}
else if (choice=='5')
SearchLinkList(x);
else if (choice=='6')
GetfromLinkList(i);
else if (choice=='7')
ShowLinkList();
else if (choice=='0')
{ j=0;
printf("\t\t\t程序结束!\n");}
else printf("\n输入错误!请重新输入!\n");
}
}
[ 本帖最后由 csn 于 2010-4-21 21:24 编辑 ]