源代码如下,完成初始化后,执行直接插入命令,程序会终止。
#include <stdio.h>
#include <iomanip>
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define max 10000
//定义结点类型
struct Node{
int data;
Node *next;
};
Node Head; //头结点
Node *DLList; //头指针
void init(Node *DLList);
void display(Node *DLList);
void insert(Node *DLList);
void search(Node *DLList);
void del(Node *DLList);
int main()
{
char choice;
DLList=&Head; //使头指针指向头结点
Head.next=NULL;
while (1)
{
system("cls");
printf( "\n\n\n\n");
printf( "\t\t 单链表操作 \n");
printf( "\t\t======================================");
printf( "\n\n");
printf( "\t\t 1:初始化 \n");
printf( "\t\t 2:显示 \n");
printf( "\t\t 3:单个插入 \n");
printf( "\t\t 4:查找 \n");
printf( "\t\t 5:删除 \n");
printf( "\t\t 0:退出 \n");
printf( "\n");
printf( "\t\t请选择:");
choice = getch();
system("cls");
switch(choice)
{
case '1':
init(DLList);
break;
case '2':
display(DLList);
break;
case '3':
insert(DLList);
break;
case '4':
// search(DLList);
break;
case '5':
// del(DLList);
break;
case '0':
exit(0);
}
}
}
//公用的等待函数
void wait()
{
printf( "\n\n请按任意键继续");
getch();
}
//屏幕提示后,从键盘输入线性表长度和随机数种子,生成以DLList为头指针的指定长度的线性表
void init(Node *DLList)
{
int length;
Node *p,*q;
while (1)
{
printf("输入元素个数(0- %d ):" , max);
scanf("%d",&length);
if (length >= 0 && length <= 10000)
break;
}
int i;
while (1)
{
printf( "输入随机数种子(0-32767):" );
scanf("%d",&i);
if (i >= 0 && i <= 32767)
break;
}
//从线性表中删除并释放原有的结点,使其成为空表
p=DLList;
while (p->next!=NULL)
{
q=p->next;
p->next=q->next;
free(q);
}
srand(i); //指定随机数种子,相同的种子将产生相同的数据序列
rand();
//向线性表插入length个新结点
for (int j=1;j<=length;j++)
{
p=new Node;
p->next=DLList->next;
DLList->next=p;
p->data=rand() % 10000;
}
}
//在屏幕上依次显示以DLList为头指针的线性表中的全部元素和元素个数
//格式应便于观察
//如果需要指定输出的宽度,可以使用 cout << setw(W) << X ,其中 X 是输出的数值,W 是占据的列数
void display(Node *DLList)
{
if(DLList->next==NULL)printf("The list is empty.\n");
else {
int i,count=0;
Node *p;
p=DLList;
for(i=1;p->next;i++)
{
printf("NO.%d:%d\n",i,p->next->data);
p=p->next;
}
printf("The number of elements is %d\n",i-1);
}
system("pause");
}
//屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾
void insert(Node *DLList)
{
Node *p,*q;
printf("Please input the element you want to insert:");
scanf("%d",&p->data);
p->next=NULL;
q=DLList;
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
system("pause");
}
//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中搜索这个元素
void search(Node *DLList)
{
}
//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中删除这个元素
//屏幕显示删除成功与否的信息
void del(Node *DLList)
{
}
//应用题
/*
6、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等。
7、生成有序的两个单链表A和B(链表的数据和个数自定),其首结点指针分别为a和b,要求将两
个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复。
8、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。