新手数据结构(C语言)版线性表简单实例操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //百度ID:yaokong4 写,适合初学数据结构者(其实我也是刚学数据结构,大神匆喷)
#include //最好在Microsoft Visual C++6.0上运行,其它软件中可能出错。
typedef struct num //结点的存储结构。
{
int data;
struct num *next;
}linknode,*linklist;
menu() //主功能菜单
{
printf("可供用户选择的功能有:\n");
printf("1.创建新的链表。\n");
printf("2.求创建的链表的长度。\n");
printf("3.向已经创建的链表中插入元素。\n");
printf("4.向已经创建的链表中删除元素。\n");
printf("0.退出程序。\n\n");
printf("请用户选择一项功能:");
return 0;
}
linklist createnewlinklist(linklist head) //创建新的单链表。
{
linklist p1,p2,top;
unsigned int lenlinklist,i=1;
printf("\n请输入创建的单链表的长度(>0的整数):");
scanf("%d",&lenlinklist);
printf("依次输入各元素的数据:\n");
p1=p2=head=top=(linklist)malloc(sizeof(linknode));
while(i<=lenlinklist)
{
p2=p1; //注意此语句要放在此位置,不可放在以下第4行位置。
scanf("%d",&p2->data);
p1=(linklist)malloc(sizeof(linknode));
p2->next=p1;
i++;
}
free(p1);
p2->next=NULL;
printf("——————你创建的单链表为:\n"); //输出链表代码。
while(top!=NULL)
{
printf("%d ",top->data);
top=top->next;
}
printf("\n\n");
return head;
}
int lenlinklist(linklist head) //求链表的长度
{
int i=0;
linklist top;
top=head;
while(top!=NULL)
{
i++;
top=top->next;
}
return i;
}
linklist insertelem(linklist head) //插入新的元素。
{
int i,len,j=0;
len=lenlinklist(head);
linklist newnode,top,ptop;
ptop=top=head;
printf("\n请输入要插入元素的位置 i :");
scanf("%d",&i);
while(i<1||i>len+1)
{
printf("输入的位置不合法,请重新输入:");
scanf("%d",&i);
}
printf("请输入要插入元素的值:");
newnode=(linklist)malloc(sizeof(linknode));
scanf("%d",&newnode->data);
printf("——————插入新元素后链表为:\n");
if(i==1) //插入元素代码部分。
{
newnode->next=top;
ptop=head=newnode;
}
else
{
while(j{
j++;
if(j==1);
else
top=top->next;
}
newnode->next=top->next;
top->next=newnode;
}
while(ptop!=NULL)
{
printf("%d ",ptop->data);
ptop=ptop->next;
}
printf("\n\n");
return head;
}
linklist delelem(linklist head) //删除链表中的元素。
{
linklist top,ptop;
int i,len,j=2;
len=lenlinklist(head);
ptop=top=head;
printf("\n请输入要删除的元素的位置:");
scanf("%d",&i);
while(i<1||i>len)
{
printf("位置输入错误,请重新输入:");
scanf("%d",&i);
}
while(j{
top=top->next;
j++;
}
if(i==1)
{
top=top->next;
ptop=head=top;
}
else
{

top->next=top->next->next;
}
printf("——————删除元素后的链表为:\n");
while(ptop!=NULL)
{
printf("%d ",ptop->data);
ptop=ptop->next;
}
printf("\n\n");
return head;
}
int main()
{
int select,lelinklist,count=0;
linklist head;
loop:menu();
if(count==0) //本行及以下八行为确保用户第一次选择功能时要选择1,不设定这一项,第一次运行并选择非1,会出错。
printf("\n首次使用,请选择功能1以创建新链表或者功能0以退出:");
scanf("%d",&select);
while((select!=1&&select!=0)&&count==0)
{
printf("请选择功能1或者0:");
scanf("%d",&select);
}
count++;
switch(select)
{
case 1:
head=createnewlinklist(head);
goto loop;
case 2:
lelinklist=lenlinklist(head);
printf("\n——————创建的线性表的长度为:%d\n\n",lelinklist);
goto loop;
case 3:
head=insertelem(head);
goto loop;
case 4:
head=delelem(head);
goto loop;
case 0:
printf("\n——————谢谢使用。\n");
break;
default:
printf("\n——————输入错误,请重新选择。\n\n");
goto loop;
}
return 0;
}

相关文档
最新文档