线性表的操作。。。为什么一直不让运行呢!?
#include <iostream.h>#include <malloc.h>
typedef int DataType; /* 定义DataType为int类型 */
typedef struct LNode
{
DataType data;
DataType length;
struct LNode *next; /* 后继指针 */
struct LNode *prior; /* 后继指针 */
}LNode,*LinkedList; /* 单链表的结点类型 */
LNode *p,*q,*head; /* 定义结构体指针 */
void LinkedListInit() /* 初始化空链表 */
{
p = (LNode *)malloc(sizeof(LNode)); /* 开辟新空间 */
p->next = NULL;
head->length = 0;
p->data = NULL;
head = p;
}
void LinkedListClear(LinkedList L) /* 清空单链表 */
{
while (head->length > 1)
{
q = p->next;
q->prior = p->prior;
q = p->prior->next;
free(p);
head->length--;
}
if (head->length == 1)
{
head->next = NULL;
free(p);
head->length = 0;
cout<<"单链表清空完成!"<<endl;
}
if(head->length < 1)
{
cout<<"单链表本来就是空链表!"<<endl;
}
}
int LinkedListEmpty(LinkedList L) /* 检查单链表是否为空 */
{
// p = head;
if(head->next == NULL)
cout<<"此链表为空!"<<endl;
else
cout<<"此链不为空!"<<endl;
}
void LinkedListTraverse(LinkedList L) /* 遍历单链表 */
{
// p = head;
if(head->next == NULL)
cout<<"此链表为空";
else
{
p = head->next;
cout<<"此链表元素为:"<<p->data<<"-->";
p = p->next;
while(p)
{
cout<<p->data<<"-->";
p = p->next;
}
cout<<"Tail."<<endl;
}
}
int LinkedListLength(LinkedList L) /* 求单链表的长度 */
{
// p = head;
L->length = 0;
if(head->next == NULL)
cout<<"此链表为空,链表长为0."<<endl;
while(p->next)
{
p = p->next;
head->length++;
}/* 记录结点数 */
cout<<"链表长为"<<head->length<<endl;
}
void LinkedListGet(LinkedList L,int j) /* 从单链表表中查找元素 */
{//L是带头结点的链表的头指针, 返回第 j 个元素
cout<<"请输入要查找元素的位置:"<<endl;
int i,a;
cin>>j;
if(j+1 <= head->length)
{
for(i=1; i=<j; i++)
{
p = p->next;
} /* 直到找到正确的位置 */
a = p->data;
cout<<a<<endl;
}
else
cout<<"输入错误,请认真查看";
}
void LinkedListLocate(LinkedList L, DataType x) /* 从单链表表中查找与给定元素值相同的元素在链表中的位置 */
{
cout<<"请输入要查找的元素(数字):"<<endl;
int i=1,a;
cin>>a;
//p = head;
while(p->next)
{
if(p->next->data != a) i++;
if(p->next->data == a) break;
p = p->next;
}
if(p->next == NULL)
cout<<"对不起,没有您所要查找的元素!"<<endl;
else
cout<<"您所要查找的元素为:"<<i<<endl;
}
void LinkedListInsert(LinkedList L,int i,DataType x) /* 向单链表中插入元素 */
{// L 为带头结点的单链表的头指针,本算法在链表中第 i 个结点之前插入新的元素 x
cout<<"请输入要插入元素的位置:"<<endl;
cin>>i;
if (i > head->length)
cout<<"输入位置有误!"<<endl;
else
{
q = (LNode *)malloc(sizeof(LNode)); /* q为插入元素指针 */
cout<<"请输入要插入的元素(数字):"<<endl;
cin>>x;
q->data = x;
for(int j=1; j<i; j++) p = p->next; //找到制定位置的前一个元素
q->next = p->next;
p->next = q; /* 元素后移 */
head->length++; /* 链表长度加 */
}
}
void LinkedListDel(LinkedList L,int x) /* 从单链表中删除元素 */
{//删除以 L 为头指针的单链表中第 x 个结点
if(head->next == NULL)
cout<<"此链表为空!"<<endl;
if(head->next)
{
cout<<"请输入要删除的元素的位置:"<<endl;
int i = 1;
cin>>x;
if (x >= head->length || x<0) /* 对x的正确性进行验证 */
{
cout<<"输入位置不存在!"<<endl;
}
while(p->next)
{
if(x == i)
{
if(p->next->next == NULL) /* 删除元素在链尾 */
{
q = p->next;
free(q); /* 释放空间 */
break;
}
else
{
q = p->next;
p->next = q->next;
free(q);
head->length--;
break;
}
}
p = p->next;
i++;
}
}
}
void LinkedListCreat(LinkedList L) /* 用尾插法建立单链表 */
{//尾插法建立带头结点的单链表
L = (LinkedList) malloc (sizeof (LNode));
L->next = NULL; /* 建立带头结点的单链表 */
q = L; /* 使q指向表尾 */
cout<<"是否利用尾差法插入元素(Y/N)"<<endl;
char ch;
int cs;
cin>>ch;
while (ch == 'Y' || ch == 'y')
{
cout<<"请输入插入元素(数字):"<<endl;
cin>>cs;
p = (LinkedList) malloc (sizeof (LNode)); /* 开辟新位置 */
p->data = cs;
p->next = NULL;
q->next = p;
q = p; /* 完成尾插 */
cout<<"是否继续利用尾差法插入元素(Y/N)"<<endl;
cin>>ch;
}
}
void LinkedListExit()
{
cout<<"按任意键退出!"<<endl;
char eh = '*';
cin>>eh;
if(eh != '*') exit(0);
}
void main()
{
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ①初始化空链表 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ②清空单链表 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ③检查单链表是否为空 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ④遍历单链表 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑤从单链表表中查找元素 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑥按元素查位置 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑦向单链表中插入元素 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑧从单链表中删除元素 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑨用尾插法建立单链表 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆ ⑩退出 ☆☆"<<endl;
cout<<"☆☆ ☆☆"<<endl;
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<"请选择(按序号):";
for(;;) /* 无限循环 */
{
int i;
cin>>i;
switch(i)
{
case 1:LinkedListInit();break;
case 2:LinkedListClear();break;
case 3:LinkedListEmpty();break;
case 4:LinkedListTraverse();break;
case 5:LinkedListGet();break;
case 6:LinkedListLocate();break;
case 7:LinkedListInsert();break;
case 8:LinkedListDel();break;
case 9:LinkedListCreat();break;
case 10:LinkedListExit();break;
default:cout<<"输入错误";break;
}
}
}
大神们解围呀~