实验一 线性表的基本操作的实现与应用
一、【实验目的】
掌握线性表的插入与删除等基本运算
掌握单链表的插入与删除等基本运算
二、【实验内容】
1、 调试顺序表、单链表的基本运算算法。
2、 有一个单链表的第一个节点指针为head,编程实现将该单链表逆置,即最后一个节点变成第一个节点,原来倒数第二个节点变成第二个节点,如此等等,在逆置中不能建立新的单链表。
3、 编写程序,将若干整数从键盘输入,以单链表形式存储起来,然后计算单链表中结点的个数(其中指针P指向该链表的第一个结点)。
键盘输入若干个整数,按输入数据逆序建立一个带头结点的单链表。
#include <iostream>
#include <stdio.h>
#define MAXSIZE 100/*顺序表的容量*/
using namespace std;
typedef char ElemType;
typedef struct
{
ElemType data[MAXSIZE]; /*存放顺序表的元素*/
int length; /*顺序表的实际长度*/
} SqList;
void InitList(SqList &sq) /*初始化线性表*/
{
sq.length=0;
}
int GetLength(SqList sq) /*求线性表长度*/
{
return sq.length;
}
int InsElem(SqList &sq,ElemType x,int i) /*插入元素*/
{
int j;
if (i<1 || i>sq.length+1) /*无效的参数i*/
return 0;
for (j=sq.length;j>i;j--) /*将位置为i的结点及之后的结点后移*/
sq.data[j]=sq.data[j-1];
sq.data[i-1]=x; /*在位置i处放入x*/
sq.length++; /*线性表长度增1*/
return 1;
}
int DelElem(SqList &sq,int i) /*删除元素*/
{
int j;
if (i<1 || i>sq.length) /*无效的参数i*/
return 0;
for (j=i;j<sq.length;j++) /*将位置为i的结点之后的结点前移*/
sq.data[j-1]=sq.data[j];
sq.length--; /*线性表长度减1*/ return 1;
}
void DispList(SqList sq) /*输出线性表*/
{
int i;
for (i=1;i<=sq.length;i++)
cout<<sq.data[i-1];
cout<<endl;
}
int main()
{
SqList A;
InitList(A);
InsElem(A,'2',1); /*插入元素*/
InsElem(A,'4',2);
InsElem(A,'1',3);
InsElem(A,'5',4);
InsElem(A,'6',5);
InsElem(A,'7',6);
printf("线性表A:");DispList(A);
cout<<"删除线性表中的第3个元素后:"<<endl;
DelElem(A,3);DispList(A);
return 0;
}