#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*Linklist;
int InitList(Linklist &L)
{
L = new Lnode;
L ->next=NULL;
return 0;
}
//倒序存储
Linklist Create(Linklist &L)
{
//L= new Lnode;
//L->next=NULL;
InitList(L);
Linklist s;
int a,n;
printf("请输入要存储的元素个数:");
scanf("%d",&a);
int i=1;
printf("请输入元素:");
while(i<=a)
{
s=new Lnode;
scanf("%d",&n);
s->data=n;
s->next=L->next;
L->next=s;
i++;
}
return L;
}
//顺序存储
Linklist Create1(Linklist &L)
{
InitList(L);
Linklist r,p;
printf("请输入数据(按空格继续输入按回车结束输入!):");
r=L;
int n=0;
char i;
do
{
p=new Lnode;
scanf("%d",&p->data);
p->next=NULL;
r->next=p;
r=p;
n++;
}
while((i=getchar())!='\n');
return L;
}
//插入函数
Linklist ListInsert(int i ,Linklist &L,int num)
{
int flag=1;
while(flag)
{
Linklist p,s;
p=L;
printf("请输入新元素要插入的位置:");
scanf("%d",&i);
int j=0;
while(p&&(j<i-1))//找到第i-1个元素
{
p=p->next;
j++;
}
s = new Lnode;
printf("请输入新元素:");
scanf("%d",&num);
s->data = num;
s->next = p->next;
p->next = s;
printf("是否继续插入新元素?1(是)/0(否)\n");
scanf("%d",&flag);
}return L;
}
//单链表的删除
Linklist ListDelete(int i,Linklist &L)
{
Linklist p,q;
int j=0;
p=L;
printf("请输入要删除的元素位置:");
scanf("%d",&i);
while(p&&j<i-1)
{
p=p->next;
j++;
}
q = p->next;
p->next = q->next;
delete q;
}
//单链表的按值查找
Linklist ListSearch(int i,Linklist &L)
{
Linklist p;
p=L;
int j=0;
printf("请输入需要查找的值:");
scanf("%d",&i);
while(p->data!=i)
{
p=p->next;
j++;
}
printf("查找的值是第%d位:%d\n",j,i);
return L;
}
void menu()
{
printf("\t\t\t\t----------------欢迎来到单链表信息存储系统-------------------\n");
printf("\t\t\t\t----------------1.顺序存储创建单链表-------------------------\n");
printf("\t\t\t\t----------------2.倒序存储创建单链表-------------------------\n");
printf("\t\t\t\t----------------3.插入新元素---------------------------------\n");
printf("\t\t\t\t----------------4.删除元素-----------------------------------\n");
printf("\t\t\t\t----------------5.按值查找元素-------------------------------\n");
printf("\t\t\t\t----------------6.输出单链表的所有元素值---------------------\n");
printf("\t\t\t\t----------------7.在此显示功能菜单---------------------------\n");
printf("\t\t\t\t----------------8.退出---------------------------------------\n");
}
void printLinkList(Linklist LL)
{
Lnode* s=LL->next;
int i=1;
printf("单链表存储的所有元素:");
do
{
printf("%d ",s->data);
s=s->next;
i++;
}while(s);
printf("\n\n\n");
}
int main()
{
Linklist L;
int i,num;
int choice;
menu();
while(1)
{
printf("请选择功能序号:");
scanf("%d",&choice);
if(choice==8)
break;
switch(choice)
{
case 1:
Create1(L);
break;
case 2:
Create(L);
break;
case 3:
ListInsert(i,L,num);
break;
case 4:
ListDelete(i,L);
break;
case 5:
ListSearch(i,L);
break;
case 6:
printLinkList(L);
break;
case 7:
menu();
break;
default: printf("输入有误!!!!\n");
}
}
return 0;
}
以上的代码是数据结构中C语言单链表的基本操作,拿来练练手的难免有些逻辑上的错误,有很多地方没有考虑周到,仅供大家参考!!