线性表的基本操作

线性表的基本操作
线性表的基本操作

实验二线性表的基本操作

一、实验目的

1.掌握用C++/C语言调试程序的基本方法。

2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。

二、实验要求

1.C++/C完成算法设计和程序设计并上机调试通过。

2.撰写实验报告,提供实验结果和数据。

3.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。

三、实验内容:

1. 分析并运行以下各子程序的主要功能。

程序1:顺序存储的线性表和运算

#include

#define MAXSIZE 100

int list[MAXSIZE];

int n;

/*insert in a seqlist*/

int sq_insert(int list[], int *p_n, int i, int x)

{int j;

if (i<0 || i>*p_n) return(1);

if (*p_n==MAXSIZE) return(2);

for (j=*p_n+1; j>i; j--)

list[j]=list[j-1];

list[i]=x;

(*p_n)++;

return(0);

}

/*delete in a seq list*/

int sq_delete(int list[], int *p_n, int i)

{int j;

if (i<0 || i>=*p_n) return(1);

for (j = i+1; j<=*p_n; j++)

list[j-1] = list[j];

(*p_n)--;

return(0);

}

void main()

{int i,x,temp;

printf("please input the number for n\n");

printf("n=");

scanf("%d",&n);

for (i=0; i<=n; i++)

{printf("list[%d]=",i);

scanf("%d",&list[i]);}

printf("The list before insertion is\n");

for (i=0; i<=n; i++) printf("%d ",list[i]);

printf("\n");

printf("please input the position where you want to insert a value\nposition=");

scanf("%d",&i);

printf("please input the value you want to insert.\nx=");

scanf("%d",&x);

temp=sq_insert(list,&n,i,x);

switch(temp)

{case 0:printf("The insertion is successful!\n");

printf("The list is after insertion is\n");

for(i=0; i<=n; i++) printf("%d ",list[i]);

printf("\n");

printf("%d\n",n);

break;

case 1:

case 2:printf("The insertion is not successful!\n");break;}

/*deleting*/

printf("The list before deleting is\n");

for (i=0; i<=n; i++) printf("%d ",list[i]);

printf("\n");

printf("please input the position where you want to delete a value\nposition=");

scanf("%d",&i);

temp=sq_delete(list,&n,i);

switch(temp)

{case 0:printf("The deleting is successful!\n");

printf("The list is after deleting is\n");

for(i=0; i<=n; i++) printf("%d ",list[i]);

printf("\n");

printf("%d",n);

break;

case 1:printf("The deleting is not successful!");break;}

}

2. 分析并运行以下各子程序的主要功能。

程序2链式存储的线性表和运算

#include

#include

struct node{

char data;

struct node *next;

};

typedef struct node NODE;

/*This function creates a link_list with N nodes.*/

NODE *create_link_list(int n)

{int i;

NODE *head, *p, *q;

if (n==0) return NULL;

head = (NODE *) malloc(sizeof(NODE));

p = head;

printf("Please input %d chars for the link list\n",n);

for (i=0; i

{scanf("%c ", &(p->data));

q=(NODE *)malloc(sizeof(NODE));

printf("test3\n");

p->next=q;

p=q;}

scanf("%c ",&(p->data));

getchar();

p->next=NULL;

return (head);}

/*This function inserts a node whose value is b*/

/*before the node whose value is a, if the node is not exist,*/ /*then insert it at the end of the list*/

void insert(NODE **p_head, char a, char b)

{NODE *p, *q;

q = (NODE *)malloc(sizeof(NODE));

q->data = b;

q->next =NULL;

if (* p_head == NULL) * p_head = q;

else

{p=(NODE*)malloc(sizeof(NODE));

p = * p_head;

while (p->data != a && p->next != NULL)

p = p->next;

q->next = p->next;

p->next = q;}

}

/*The function deletes the node whose value is a,*/

/*if success, return 0, or return 1*/

int deletenode(NODE **p_head, char a)

{NODE *p, *q;

q=*p_head;

if (q==NULL) return(1);

if (q->data == a)

{* p_head = q->next;

free(q);

return (0);}

else

{while (q->data != a && q->next != NULL)

{p = q;

q = q->next;}

if (q->data == a)

{p->next = q->next;

free(q);

return(0);}

else return(1);}

}

void main()

{ NODE *my_head,*p;

/* create a link list with m nodes */

int m;

char ch_a,ch_b;

printf("please input the number of nodes for the link_list\nm=");

scanf("%d",&m);

getchar();

printf("test1\n");

my_head = (NODE *) malloc(sizeof(NODE));

my_head=create_link_list(m);

/*Output the link list*/

printf("The link list is like:\n");

p=my_head;

while (p != NULL)

{printf("%c ",p->data);

p=p->next;

}

printf("\n");

/*insert a node whose value is b before a*/

printf("Please input the position for a\n ch_a=");

getchar();

scanf("%c",&ch_a);

getchar();

printf("Please input the value that you want to insert\n ch_b=");

scanf("%c",&ch_b);

getchar();

insert(&my_head,ch_a,ch_b);

printf("The link list after insertion is like:\n");

p=my_head;

while (p != NULL)

{printf("%c ",p->data);

p=p->next;

}

printf("\n");

/*delete a node whose value is a*/

printf("Please input the position for a a=");

scanf("%c",&ch_a);

getchar();

deletenode(&my_head,ch_a);

printf("The link list after deleting is like:\n");

p=my_head;

while (p != NULL)

{printf("%c ",p->data);

p=p->next;

}

printf("\n");

}

3. 运行以下程序并分析各子函数的主要功能。

#include

#include

struct tagNode

{

int data;

struct tagNode *pNext;

};

typedef struct tagNode* pNode;

//将结点插入到链表的适当位置,这是一个降序排列的链表//

void insertList(pNode head,//链表头结点

pNode pnode)//要插入的结点

{

pNode pPri=head;

while (pPri->pNext!=NULL)

{

if (pPri->pNext->datadata)

{

pnode->pNext=pPri->pNext;

pPri->pNext=pnode;

break;

}

pPri=pPri->pNext;

}

if (pPri->pNext==NULL)//如果要插入的结点最小

{

pPri->pNext=pnode;

}

}

//输出链表

void printLinkedList(pNode head)

{

pNode temp=head->pNext;

while (temp!=NULL)

{

printf("%d ",temp->data);

temp=temp->pNext;

}

}

//从链表中删除结点

void delformList(pNode head,int data)

{

pNode temp=head->pNext;

pNode pPri=head;

while (temp!=NULL)

{

if (temp->data==data)

{

pPri->pNext=temp->pNext;

free(temp);

break;

}

pPri=temp;

temp=temp->pNext;

}

}

void main()

{

pNode head=(pNode)malloc(sizeof(struct tagNode));//给头指针分配空间

pNode pTemp=NULL;

int temp;

head->pNext=NULL;//比较好的习惯就是分配好空间,马上赋值

printf("请输入要放入链表中的数据,以-1结尾:");

//读入数据,以-1结尾,把数据插入链表中

scanf("%d",&temp);

while (temp!=-1)

{

pTemp=(pNode)malloc(sizeof(struct tagNode));

pTemp->data=temp;

pTemp->pNext=NULL;

insertList(head,pTemp);

scanf("%d",&temp);

}

printf("降序排列的链表为:\n");

printLinkedList(head);

printf("\n");

//下面的代码当删除函数编写成功后,可以取消注释,让其执行,主要是调用函数实现链表结点的删除

//printf("请输入要删除数,以-1结尾:");

//scanf("%d",&temp);

//while (temp!=-1)

//{

// delformList(head,temp);

// scanf("%d",&temp);

//}

//printf("删除节点后,链表中剩余数据为:");

//printLinkedList(head);

//printf("\n");

}

四、思考与提高

试将以上链表改为有序表,并分析有序表有哪些显著的优点和缺点?库函数载和常量定义:(代码,C++)

#include

using namespace std;

const int MaxSize=100;

(1)顺序表存储结构的定义(类的声明):(代码)

template //定义模板类SeqList

class SeqList

{

public:

SeqList( ); //无参构造函数

SeqList(datatype a[ ], int n); //有参构造函数

~SeqList(){}; //析构函数为空

int Length(); //求线性表的长度

datatype Get(int i); //按位查找,取线性表的第i个元素int Locate(datatype item); //查找元素item

void Insert(int i, datatype item); //在第i个位置插入元素item

datatype Delete(int i); //删除线性表的第i个元素

void display(); //遍历线性表,按序号依次输出各元素private:

datatype data[MaxSize]; //存放数据元素的数组

int length; //线性表的长度

};

(2)初始化顺序表算法实现(不带参数的构造函数)

/*

*输入:无

*前置条件:顺序表不存在

*功能:构建一个顺序表

*输出:无

*后置条件:表长为0

*/

实现代码:

template

SeqList:: SeqList( )

{

length=0;

}

(3)顺序表的建立算法(带参数的构造函数)

/*

*输入:顺序表信息的数组形式a[],顺序表长度n *前置条件:顺序表不存在

*功能:将数组a[]中元素建为长度为n的顺序表*输出:无

*后置条件:构建一个顺序表

*/

实现代码:

template

SeqList:: SeqList(datatype a[], int n)

{

if (n>MaxSize)

{

cout<<"数组元素个数不合法"<

}

for (int i=0; i

data[i]=a[i];

length=n;

}(4)在顺序表的第i个位置前插入元素e算法

/*

*输入:插入元素e,插入位置i

*前置条件:顺序表存在,i要合法

*功能:将元素e插入到顺序表中位置i处

*输出:无

*后置条件:顺序表插入新元素,表长加1

*/

实现代码:

template

void SeqList::Insert(int i, datatype item) {

int j;

if (length>=MaxSize)

{

cout<<"溢出"<

}

if (i<1 || i>length+1)

{

cout<<"i不合法!"<

}

for (j=length; j>=i; j--)

data[j]=data[j-1];

data[i-1]=item;

length++;

}(5)删除线性表中第i个元素算法

/*

*输入:要删除元素位置i

*前置条件:顺序表存在,i要合法

*功能:删除顺序表中位置为i的元素

*输出:无

*后置条件:顺序表册除了一个元素,表长减1

*/

实现代码:

template

datatype SeqList::Delete(int i)

{

int item,j;

if (length==0)

{

cout<<"表为空,无法删除元素!"<

}

if (i<1 || i>length)

{

cout<<"i不合法!"<

}

item=data[i-1];//获得要删除的元素值

for (j=i; j

data[j-1]=data[j]; //注意数组下标从0记length--;

return item;

}(6)遍历线性表元素算法

/*

*输入:无

*前置条件:顺序表存在

*功能:顺序表遍历

*输出:输出所有元素

*后置条件:无

*/

实现代码:

template

void SeqList::display()

{

if(length==0)

{

cout<<"表为空,无法输出!"<

}

for(int i=0;i

{

cout<

}

}

(7)获得线性表长度算法

/*

*输入:无

*前置条件:顺序表存在

*功能:输出顺序表长度

*输出:顺序表长度

*后置条件:无

*/

实现代码:

template

int SeqList::Length()

{

return Length;

}

(8)在顺序线性表中查找e值,返回该元素的位序算法/*

*输入:查询元素值e

*前置条件:顺序表存在

*功能:按值查找值的元素并输出位置

*输出:查询元素的位置

*后置条件:无

*/

实现代码:

template

int SeqList::Locate(datatype item)

{

for (int i=0; i

if (data[i]==item)

return i+1 ;

//下标为i的元素等于item,返回其序号i+1

return 0; //查找失败

}

(9)获得顺序线性表第i个元素的值

/*

*输入:查询元素位置i

*前置条件:顺序表存在,i要合法

*功能:按位查找位置为i的元素并输出值

*输出:查询元素的值

*后置条件:无

*/

实现代码:

template

datatype SeqList::Get(int i)

{

if (i<0||i>length)

{

cout<<"i不合法!"<

}

else return data[i-1];

}

(10)判表空算法

/*

*输入:无

*前置条件:无

*功能:判表是否为空

*输出:为空返回1,不为空返回0

*后置条件:无

*/

实现代码:

template

bool SeqList::Empty()

{

if (length==0)

{

return 1;

}

else

{

return 0;

}

}

(11)求直接前驱结点算法

/*

*输入:要查找的元素e,待存放前驱结点值e1

*前置条件:无

*功能:查找该元素的所在位置,获得其前驱所在位置。

*输出:返回其前驱结点的位序。

*后置条件:e1值为前驱结点的值

*/

实现代码:

template

int SeqList::Pre(datatype item)

{

int k=Locate(item)-1;

if (k>0)

return k;

else

{

cout<<"无前驱结点!"<

return 0;

}

}

(12)求直接后继结点算法

/*

*输入:要查找的元素e,待存放后继结点值e1

*前置条件:无

*功能:查找该元素的所在位置,获得其后继所在位置。

*输出:返回其后继结点的位序。

*后置条件:e1值为后继结点的值

*/

实现代码:

template

int SeqList::Suc(datatype item)

{

int k=Locate(item)+1;

if (k>length)

{

cout<<"无后继结点!"<

return 0;

}

else

{

return k;

}

}

上机实现以上基本操作,写出main()程序:

用以上基本操作算法,实现A=AUB算法。(利用函数模板实现)/*

*输入:集合A,集合B

*前置条件:无

*功能:实现A=AUB

*输出:无

*后置条件:A中添加了B中的元素。

*/

实现代码:

template

SeqList SeqList::Add(SeqList& item) {

if (item.Empty())

return *this;

else

{

int k=item.Length();

int num=this->Length();

for (int i=1;i<=k;i++)

{

for(int j=0;j

if (data[j]==item.Get(i))

{

break;

}

else if (num-1==j&&data[num-1]!=item.Get(i))

{

this->Insert(++num,item.Get(i));

}

}

return *this;

}

}

void main()

{

SeqList A,B;

cout<<"A∪B的结果是:"<

A.Insert(1,1);

A.Insert(2,2);

A.Insert(3,3);

A.Insert(4,4);

A.Insert(5,5); //插入集合A中元素

B.Insert(1,2);

B.Insert(2,6);

B.Insert(3,1);

B.Insert(4,8);

B.Insert(5,9); //插入集合B中元素

A.Add(B);

A.display();

cout<

}

实现代码:

template

void SeqList::orderInsert(datatype item)

{

int num=this->Length();

for (int i=0;i

{

if ((data[i]item))

{

for (int k=num;k>i;k--)

data[k]=data[k-1];

data[i+1]=item;

length++;

break;

}

if (data[i]>item)

{

for(int k=num;k>i;k--)

data[k]=data[k-1];

data[i]=item;

length++;

break;

}

}

}

void main()

{

SeqList A,B;

A.Insert(1,3);

A.Insert(2,5);

A.Insert(3,6);

A.Insert(4,8);

A.Insert(5,10); //插入顺序表

cout<<"原顺序表为:"<

A.display(); //输出顺序表

cout<

A.orderInsert(2);

A.orderInsert(4); //插入元素

cout<<"插入新元素后的顺序表为:"<

A.display(); //输出重新排序后的顺序表

}

算法实现:La,Lb为非递减的有序线性表,将其归并为Lc,该线性表仍有序(未考虑相同时删除一重复值)(利用函数类板实现)

MergeList:

/*

*输入:有序线性表La,有序线性表Lb

*前置条件:顺序表已有序

*功能:将两线性表归并,不去掉相同元素

*输出:返回一个新的有序线性表Lc

*后置条件:无

*/

实现代码:

template

SeqList SeqList::ElseAdd(SeqList Seq1,SeqList Seq2)

{

int num=Seq2.Length();

for(int i=0;i<=num;i++){

Seq1.orderInsert(Seq2.Get(i));

}

return Seq1;

}

void main()

{

SeqList La,Lb,Lc;

La.Insert(1,2);

La.Insert(2,4);

La.Insert(3,6);

La.Insert(4,8); //插入La

cout<<"La中元素为:"<

La.display(); //输出La

cout<

Lb.Insert(1,3);

Lb.Insert(2,6);

Lb.Insert(3,8); //插入Lb

cout<<"Lb中元素为:"<

Lb.display(); //输出Lb

cout<

Lc=Lc.ElseAdd(La,Lb); //合并两线性表

cout<<"合并后的Lc为:"<

Lc.display(); //输出合并后的线性表

cout<

}

Excel工作表的建立和编辑等基本操作

E x c e l工作表的建立和编辑 等基本操作 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

Excel工作表的建立和编辑等基本操作(2课时) 教学目的: 学习excel的使用,初步了解工作表的建立和编辑操作。 教学重点: 工作表的数据输入(包括不同文本、数值、日期等类型,有规律数据的输入,公式的编辑),工作表的格式设置(包括字体、对齐、边框和图案的设置)。 教学难点: 电子表格自动填充和公式编辑、函数应用。 上机任务 2

任务一:建立一个成绩表并简单设置格式 1、运行Excel,创建一个工作簿文件,文件命名为“学生成绩.xls”; 2、在sheet1中输入如下图所示的数据。注意,学号采用自动填充的功能快速输入; 3

3、在第1行上面插入一行,在A1单元格中输入标题“2009级学生入学成绩表”,将A1到I1单元格合并居中,设置标题为黑体、16号字、红色,单元格背景色为浅黄色; 4

4、在学号为“20080008”的记录前插入一行,任意输入数据。 5、删除学号为“20080006”的那一行。 6、将所有学号中的“2008”改为“2009”。 7、运用函数或公式计算出每个学生的“总分、平均分”,填入相应的单元格中。 8、分别在A11和A12单元格输入“最高分”、“最低分”,求出所有学生中各门课程的最高分和最低分,填入相应的单元格中。 9、设置表中各单元格水平居中对齐、垂直居中对齐。 10、设置第1行的行高为30,其余各行行高为16;列宽为“最适合的列宽”。 11、设置平均分列中的数值格式为保留2位小数位数。 5

实验二 链表操作实现

实验二链表操作实现 实验日期: 2017 年 3 月 16 日 实验目的及要求 1. 熟练掌握线性表的基本操作在链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的链式存储结构的定义和基本操作的实现; 4. 通过本实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 实验容 已知程序文件linklist.cpp已给出学生身高信息链表的类型定义和基本运算函数定义。 (1)链表类型定义 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct node{ datatype data; /*数据域*/ struct node *next; /*指针域*/ } LinkNode, *LinkList; (2)带头结点的单链表的基本运算函数原型 LinkList initList();/*置一个空表(带头结点)*/ void createList_1(LinkList head);/*创建单链表*/ void createList_2(LinkList head);/* 创建单链表*/ void sort_xh(LinkList head);/*单链表排序*/ void reverse(LinkList head);/*对单链表进行结点倒置*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(LinkList head);/*打印单链表*/ void save(LinkList head,char strname[]);/*保存单链表到文件*/

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

数据结构 单链表基本操作代码

实验一单链表 #include "stdio.h" #include "stdlib.h" typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void creatLNode(LinkList &head) { int i,n; LNode *p; head=(LNode*)malloc(sizeof(LNode)); head->next=NULL; printf("请输入链表的元素个数:"); scanf("%d",&n); for(i=n;i>0;i--) { p=(LNode*)malloc(sizeof(LNode)); printf("第%d个元素:",i); scanf("%d",&p->data); p->next=head->next; head->next=p; } } void InsertLNode(LinkList &L) { LNode *p=L; int i,j=0,e; printf("请输入你要插入的位置(超过链表长度的默认插在最后!):"); scanf("%d",&i); printf("请输入你要插入的元素:"); scanf("%d",&e); while (p->next&&jnext; ++j; }

LNode *s; s=(LNode*)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; } int DeleteLNode(LinkList &L,int i,int &e) { LNode *p; p=L; LNode *q; int j=0; while (p->next&&jnext; ++j; } if(!(p->next)||j>i-1) { printf("删除位置不合理!\n"); return 0; } q=p->next; p->next=q->next; e=q->data; free(q); return e; } void DeleteCF(LinkList &L) { LNode *p,*s,*r; p=L->next; while(p!=NULL) { r=p; s=r->next; while(s!=NULL) { if(p->data==s->data) { r->next=s->next; s=s->next;

201560140140--袁若飞--实验1:线性表的基本操作及其应用

数据结构 实验1:线性表的基本操作及其应用 班级:RB软工移151 学号:201560140140 姓名:袁若飞

实验一线性表 一、实验目的 1、帮助读者复习C++语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,题目一、二是必做题。题目三、题目四选作。 三、实验准备知识 1、请简述线性表的基本特性和线性表的几种基本操作的机制 ①答:线性表的基本特性是:对线性表中某个元素ai来说,称其前面的元素ai-1为ai的直接前驱,称其后前面的元素ai+1为ai的直接后继。显然,线性表中每个元素最多有一个直接前驱和一个直接后继。 ②答:线性表的几种基本操作的机制有六个: (1)初始化线性表initial_List(L)——建立线性表的初始结构,即建空表。这也是各种结构都可能要用的运算。 (2)求表长度List_length(L)——即求表中的元素个数。 (3)按序号取元素get_element(L,i)——取出表中序号为i的元素。(4)按值查询List_locate(L,x)——取出指定值为x的元素,若存在该元素,则返回其地址;否则,返回一个能指示其不存在的地址值或标记。 (5)插入元素List_insert(L,i,x)——在表L的第i个位置上插入值为x的元素。显然,若表中的元素个数为n,则插入序号i应满足1<=i<=n+1。(6)删除元素List_delete(L,i)——删除表L中序号为i的元素,显然,待删除元素的序号应满足1<=i<=n。 2、掌握线性表的逻辑结构。 3、掌握线性表的链式存储结构。 4、熟练掌握线性表的插入、删除等操作。

数据结构实现顺序表的各种基本运算(20210215233821)

实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化顺序表; 2 、顺序表的插入; 3、顺序表的输出; 4 、求顺序表的长度 5 、判断顺序表是否为空; 6 、输出顺序表的第i位置的个元素; 7 、在顺序表中查找一个给定元素在表中的位置; 8、顺序表的删除; 9 、释放顺序表 三、算法思想与算法描述简图

主函数main

四、实验步骤与算法实现 #in clude #in clude #defi ne MaxSize 50 typedef char ElemType; typedef struct {ElemType data[MaxSize]; in t le ngth; void In itList(SqList*&L)〃 初始化顺序表 L {L=(SqList*)malloc(sizeof(SqList)); L->le ngth=0; for(i=0;ile ngth;i++) prin tf("%c ",L->data[i]); } void DestroyList(SqList*&L)〃 {free(L); } int ListEmpty(SqList*L)〃 {retur n( L->le ngth==O); } int Listle ngth(SqList*L)〃 {return(L->le ngth); } void DispList(SqList*L)〃 {int i; 释放顺序表 L

顺序表的建立及其基本操作技巧

山东师范大学 实验报告 课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达 学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及基本运算 二、实验环境 Windows10,Visual Studio 2017 三、实验内容及实施 实验内容 1、建立一个顺序表,输入n个元素并输出; 2、查找线性表中的最大元素并输出; 3、在线性表的第i个元素前插入一个正整数x; 4、删除线性表中的第j个元素; 5、将线性表中的元素按升序排列; 【程序流程图】

【程序】 #include #include using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct { //定义顺序表结构 int data[MAXSIZE]; //存储空间的基地址; int length; //当前表长 }SqList; int InitList(SqList &L) //初始化顺序表 { L.length = 0; //当前长度为0 return OK; } void ShowList(SqList &L) //显示顺序表 { cout << "您构建的顺序表为:" << endl; //提示int i; for (i = 0; i < L.length; i++) { cout << L.data[i] << " ";

实验一 线性表的基本操作

实验一线性表的基本操作 一、实验目的 1. 熟悉C/C++语言上机环境; 2. 掌握线性表的基本操作:查找、插入、删除等运算在顺序存储、链式存储结构上的运算。 二、实验环境 1. 装有Visual C++6.0的计算机。 2. 本次实验共计2学时。 三、实验内容 1. 建立顺序表,基本操作包括:初始化、建立顺序表、输出顺序表、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 2. 设有两个非递增有序的线性表A和B,均已顺序表作为存储结构。编写算法实现将A表和B表合并成一个非递增有序排列的线性表(可将线性表B插入线性表A中,或重新创建线性表C)。 3. 建立单链表,基本操作包括:初始化、判断是否为空、取表中第i个元素、查找、插入和删除。并在主函数中完成对各种函数的测试。 四、源程序 #include #include #include #define MaxSize 50 typedef char ElemType; //-------存储结构---------- typedef struct { ElemType elem[MaxSize]; //存放顺序表中的元素 int length; //存放顺序表的长度 } SqList; //-------初始化线性表---------- void InitList(SqList *&L) //初始化线性表,构造一个空的线性表,并将长度设置为0 { L=(SqList *)malloc(sizeof(SqList)); L->length=0;

Excel工作表的建立和编辑等基本操作

Excel工作表的建立和编辑等基本操作(2课时) 教学目的: 学习excel的使用,初步了解工作表的建立和编辑操作。 教学重点: 工作表的数据输入(包括不同文本、数值、日期等类型,有规律数据的输入,公式的编辑),工作表的格式设置(包括字体、对齐、边框和图案的设置)。 教学难点: 电子表格自动填充和公式编辑、函数应用。 上机任务 1

任务一:建立一个成绩表并简单设置格式 1、运行Excel,创建一个工作簿文件,文件命名为“学生成绩.xls”; 2、在sheet1中输入如下图所示的数据。注意,学号采用自动填充的功能快速输入;2

3、在第1行上面插入一行,在A1单元格中输入标题“2009级学生入学成绩表”,将A1到I1单元格合并居中,设置标题为黑体、16号字、红色,单元格背景色为浅黄色; 4、在学号为“20080008”的记录前插入一行,任意输入数据。 3

5、删除学号为“20080006”的那一行。 6、将所有学号中的“2008”改为“2009”。 7、运用函数或公式计算出每个学生的“总分、平均分”,填入相应的单元格中。 8、分别在A11和A12单元格输入“最高分”、“最低分”,求出所有学生中各门课程的最高分和最低分,填入相应的单元格中。 9、设置表中各单元格水平居中对齐、垂直居中对齐。 10、设置第1行的行高为30,其余各行行高为16;列宽为“最适合的列宽”。 11、设置平均分列中的数值格式为保留2位小数位数。 12、为该表增加表格线(不包括标题行),内网格线为最细的实线,粉红色;外框线为最粗的实线,橙色。 4

13、将第2行的所有字符的字体设置为楷体、加粗,字号为14,颜色设置为红色,填充背景色为青绿色。 14、对“张三”插入批注,批注为“该生已转专业。” 15、把sheet1命名为“入学成绩表”; 16、保存文件并提交作业。 参考效果图如下: 5

线性表的基本操作实验报告

实验一:线性表的基本操作 【实验目的】 学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。 【实验内容】 1.顺序表的实践 1) 建立4个元素的顺序表s=sqlist[]={1,2,3,4,5},实现顺序表建立 的基本操作。 2) 在sqlist []={1,2,3,4,5}的元素4和5之间插入一个元素9,实现 顺序表插入的基本操作。 3) 在sqlist []={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9, 实现顺序表的删除的基本操作。 2.单链表的实践 3.1) 建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链 表建立的基本操作。 2) 将该单链表的所有元素显示出来。 3) 在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插 入的基本操作。 4) 在一个包括头结点和5个结点的(5,4,3,2,1)的单链表的指定位置 (如i=2)删除一个结点,实现单链表删除的基本操作。 5) 实现单链表的求表长操作。 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了刚创

建的工程之中。 4.写好代码 5.编译->链接->调试 1、#include "stdio.h" #include "malloc.h" #define OK 1 #define OVERFLOW -2 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int ElemType; typedef int Status; typedef struct { ElemType *elem; int length; int listsize; } SqList; Status InitList( SqList &L ) { int i,n; L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof (ElemType)); if (!L.elem) return(OVERFLOW); printf("输入元素的个数:"); scanf("%d",&n); printf("输入各元素的值:"); for(i=0;i

顺序表的基本操作

《数据结构》实验报告一 顺序表的基本操作 班级:网络工程学号:12015242183 实验日期:2016.9.25 姓名:邓宗永 程序文件名及说明:sequenlist 顺序表 一、实验目的 1、掌握使用Turbo C3.0上机调试线性表的基本方法; 2、掌握顺序表的基本操作:插入、删除、查找以及线性表合并等运算。 二、实验要求 1、认真阅读和掌握实验的程序。 2、上机运行程序。 3、保存和打印出程序的运行结果,并结合程序进行分析。 4、按照你对线性表的操作需要,编写写主程序并运行,打印出文件清单和运行结果 三、注意事项: 在磁盘上创建一个目录,专门用于存储数据结构实验的程序。 四、实验内容 1.顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: (1)从键盘输入10个整数,产生顺序表,并输入结点值。 (2)从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 (3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x 插入在对应位置上,输出顺序表所有结点值,观察输出结果。 (4)从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 五、实验报告必须写明内容 1.程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设 计,符号名说明等) 程序的结构:通过子函数实现输出,删除,插入,查找等功能,高耦合低内聚 数据结构:线性结构,顺序储存 输入/输出设计:根据屏幕提示,从键盘读取数据 2.源程序及注释: #include #include typedef int datatype; #define maxsize 10 typedef struct //创建一个顺序表包含10个整数

单链表的基本操作

上机实验报告 学院:计算机与信息技术学院 专业:计算机科学与技术(师范)课程名称:数据结构 实验题目:单链表建立及操作 班级序号:师范1班 学号:201421012731 学生姓名:邓雪 指导教师:杨红颖 完成时间:2015年12月25号

一、实验目的: (1)动态地建立单链表; (2)掌握线性表的基本操作:求长度、插入、删除、查找在链式存储结构上的实现; (3)熟悉单链表的应用,明确单链表和顺序表的不同。 二、实验环境: Windows 8.1 Microsoft Visual c++ 6.0 三、实验内容及要求: 建立单链表,实现如下功能: 1、建立单链表并输出(头插法建立单链表); 2、求表长; 3、按位置查找 4、按值查找结点; 5、后插结点; 6、前插结点 7、删除结点; 四、概要设计: 1、通过循环,由键盘输入一串数据。创建并初始化一个单链表。 2、编写实现相关功能函数,完成子函数模块。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。

五、代码: #include #include typedef char datatype; typedef struct node { datatype data; struct node *next; }linklist; linklist *head,*p; //头插法建立单链表 linklist *Creatlistf() { char ch; linklist *head,*s; head=NULL; ch=getchar(); printf("请输入顺序表元素(数据以$结束):\n"); while(ch!='$') { s=(linklist *)malloc(sizeof(linklist)); s->data=ch; s->next=head; head=s; ch=getchar(); } return head; } //求单链表的长度 void get_length(struct node *head) { struct node *p=head->next; int length=0;

实验一 线性表基本操作的编程实现

实验一线性表基本操作的编程实现 【实验目的】 线性表基本操作的编程实现 要求: 线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。建议实现键盘输入数据以实现程序的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。 【注意事项】 1.开发语言:使用C。 2.可以自己增加其他功能。 【思考问题】 1.线性表的顺序存储和链表存储的差异?优缺点分析? 2.那些操作引发了数据的移动? 3.算法的时间效率是如何体现的? 4.链表的指针是如何后移的?如何加强程序的健壮性? 【参考代码】(以下内容,学生任意选择一个完成即可) (一)利用顺序表完成一个班级学生课程成绩的简单管理 1、预定义以及顺序表结构类型的定义 (1) #include #include #define ListSize 100 //根据需要自己设定一个班级能够容纳的最大学生数 (2) typedef struct stu { int num; //学生的学号 char name[10]; //学生的姓名 float physics; //物理成绩 float math; //数学成绩 float english; //英语成绩 }STUDENT; //存放单个学生信息的结构体类型 typedef struct List { STUDENT stu[ListSize]; //存放学生的数组定义,静态分配空间

顺序表的基本操作 (2)

顺序表的基本操作 /*sqList.h 文件*/ #define LIST_INIT_SIZE 50 /*初始分配的顺序表长度*/ #define INCREM 10 /*溢出时,顺序表长度的增量*/ #define OVERFLOW 1 #define OK 0 #define ERROR -1 typedef int ElemType; /*定义表元素的类型*/ typedef struct SqList{ ElemType *elem; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }SqList; /*sqListOp.h 文件*/ #include "Sqlist.h" int InitList_sq(SqList &L); //顺序表创建函数定义 void FreeList_sq(SqList &L); //顺序表销毁函数定义 int ListInsert_sq(SqList &L, int i, ElemType e); //在顺序表的位置i插入元素e void PrintList_sq(SqList &L); //遍历并输出顺序表所有元素 int ListDelete_sq(SqList &L, int i,ElemType &e); //删除顺序表第i个元素的 bool ListEmpty(SqList &L); //判断顺序表是否为空 int LocateElem_sq(SqList L,ElemType e); //在顺序表里查找出第1个与e相等的数据元素位置//已知线性表La和Lb的元素按值非递减排列 //归并后的La和Lb得到新的顺序线性表Lc,Lc的元素也是按值非递减排列 void MergeList_sq(SqList La,SqList Lb, SqList &Lc); /*sqListOp.cpp文件*/ #include #include #include #include "sqlistOp.h" //创建顺序表 int InitList_sq(SqList &L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); /*初始化失败,返回0*/ L.length = 0; /*置空表长度为0*/ L.listsize = LIST_INIT_SIZE; /*置初始空间容量*/ return OK; /*初始化成功,返回1*/

链表的基本操作(基于C)

#include #include struct Student { char cName[20]; int iNumber; struct Student* pNext; }; int iCount; struct Student* Create() { struct Student* pHead=NULL; struct Student* pEnd,*pNew; iCount=0; pEnd=pNew=(struct Student*)malloc(sizeof(struct Student)); printf("please first enter Name ,then Number\n"); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); while(pNew->iNumber!=0) { iCount++; if(iCount==1) { pNew->pNext=pHead; pEnd=pNew; pHead=pNew; } else { pNew->pNext=NULL; pEnd->pNext=pNew; pEnd=pNew; } pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); } free(pNew); return pHead; }

void Print(struct Student* pHead) { struct Student *pTemp; int iIndex=1; printf("----the List has %d members:----\n",iCount); printf("\n"); pTemp=pHead; while(pTemp!=NULL) { printf("the NO%d member is:\n",iIndex); printf("the name is: %s\n",pTemp->cName); printf("the number is: %d\n",pTemp->iNumber); printf("\n"); pTemp=pTemp->pNext; iIndex++; } } struct Student* Insert(struct Student* pHead) { struct Student* pNew; printf("----Insert member at first----\n"); pNew=(struct Student*)malloc(sizeof(struct Student)); scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber); pNew->pNext=pHead; pHead=pNew; iCount++; return pHead; } void Delete(struct Student* pHead,int iIndex) { int i; struct Student* pTemp; struct Student* pPre; pTemp=pHead; pPre=pTemp; printf("----delete NO%d member----\n",iIndex); for(i=1;i

实验一 线性表基本操作

实验一线性表基本操作 (4课时) 一、实验目的 掌握线性表的顺序表和链表的基本操作:建立、插入、删除、查找、合并、打印等运算。 二、实验要求 1.格式正确,语句采用缩进格式; 2.设计子函数实现题目要求的功能; 3.编译、连接通过,熟练使用命令键; 4.运行结果正确,输入输出有提示,格式美观。 5.输入数据至少三组,分别代表不同的情况,以测试程序的正确性。 6.将运行结果截图,并粘在文档的相应位置。 三、实验环境 1.turboc2,win-tc,VC++ 四、实验内容和步骤 1.编程实现在顺序存储的有序表中插入一个元素。 2.编程实现把顺序表中从i个元素开始的k个元素删除。 3.编程序实现将单链表的数据逆置,即将原表的数据(a1,a2….an)变成(an,…..a2,a1)。4.约瑟夫环问题。 约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。 利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。 例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。 五、根据实验过程填写下面内容 1.写出第1题的程序并写出运行结果和分析。 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define ElemType int #define MAXSIZE 100 typedef struct//顺序表申明 { ElemType elem[MAXSIZE]; int last; }SeqList;

顺序表的实现

数据结构实验顺序表的实现 姓名 学号 专业班级

实验名称:顺序表的实现 一.实验目的: 1.掌握线性表的顺序存储结构; 2.验证顺序表的基本操作的实现; 3.理解算法与程序的关系,能够将顺序表转换为对应程序; 二.实验内容: 1.建立含有若干元素的顺序表; 2.对已建立的顺序表实现插入、删除、查找等基本操作; 三.算法设计 1.建立顺序表并初始化 1)顺序表的大小为MaxSize,存入元素的下标为n a.如果n>MaxSize,则抛出参数非法; b.将元素a[i]赋值给线性表中元素序号为i的元素; 2.顺序表的插入 1)如果表满了,则抛出上溢异常; 2)如果元素插入的位置不合理,则抛出位置异常; 3)将最后一个元素及第i个元素分别向后移动一个位置; 4)将要插入的元素x填入为位置i处; 5)表长加1; 3.顺序表的删除 1)如果表空,则抛出下一异常;

2)如果删除的位置不合理,则抛出删除位置异常; 3)取出被删元素; 4)将下表为i至n-1的元素分别向前移动1个元素; 5)表长减一,返回被删元素值; 4.顺序表的查找 A.按位查找 1)如果查找的位置不合理,则抛出查找的不合理; 2)返回被查找的元素值; B.按值查找 1)若查找成功,返回被查找元素的序号; 2)若查找失败,则返回0; 四.部分代码 文件名称:SeqList.h #define SEQLIST_H const int MaxSize = 5; template class SeqList{ publi#ifndef SEQLIST_H c: SeqList(); //默认构造函数 SeqList(T a[],int n); //数组a传递数据元素信息,n表示元素个数 ~SeqList(); //析构函数 int Length(); //返回顺序表的长度 void Insert(int i,T x);//在第i个位置插入数据元素x T Get(int i); //得到第i个位置上的数据元素 T Delete(int i); //删除第i个位置上的数据元素 int Locate(T x); //在顺序表中查找数据元素x,并返回它的位置,否则返回0. void PrintList(); //打印顺序表中的数据元素信息。 private: T data[MaxSize]; //数组data用来存放顺序表的数据元素 int length; //length表示顺序表中数据元素的个数 };

单链表的基本操作 C语言课程设计

课程设计(论文) 题目名称单链表的基本操作 课程名称C语言程序课程设计 学生姓名 学号 系、专业信息工程系、网络工程专业 指导教师成娅辉 2013年6月6 日

目录 1 前言 (3) 2 需求分析 (3) 2.1 课程设计目的 (3) 2.2 课程设计任务 (3) 2.3 设计环境 (3) 2.4 开发语言 (3) 3 分析和设计 (3) 3.1 模块设计 (3) 3.2 系统流程图 (4) 3.3 主要模块的流程图 (6) 4 具体代码实现 (9) 5 课程设计总结 (12) 5.1 程序运行结果 (12) 5.2 课程设计体会 (12) 参考文献 (13) 致谢 (13)

1 前言 我们这学期学习了开关语句,循环语句、链表、函数体、指针等的应用,我们在完成课程设计任务时就主要用到这些知识点,本课题是单链表的简单操作,定义四个子函数分别用来创建链表、输出链表、插入数据以及删除数据,主函数中主要用到开关语句来进行选择调用哪个子函数,下面就是课程设计的主要内容。 2 需求分析 2.1 课程设计目的 学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。 2.2 课程设计任务 输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。 2.3 设计环境 (1)WINDOWS 7系统 (2)Visual C++ 2.4 开发语言 C语言 3 分析和设计 3.1 模块设计 定义链表结点类型struct node表示结点中的信息,信息包括数据域data(用于存放结点中的有用数据)以及指针域next(用于存放下一个结点的地址),并将链表结点类型名改为NODE。如下所示:

单链表的建立及其基本操作的实现(完整程序)

#include "stdio.h"/*单链表方式的实现*/ #include "malloc.h" typedef char ElemType ; typedef struct LNode/*定义链表结点类型*/ { ElemType data ; struct LNode *next; }LNode,*LinkList;/*注意与前面定义方式的异同*/ /*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/ LinkList CreateList_L(LinkList head) { ElemType temp; LinkList p; printf("请输入结点值(输入0结束)"); fflush(stdin); scanf("%c",&temp); while(temp!='0') { if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z')) { p=(LinkList)malloc(sizeof(LNode));/*生成新的结点*/ p->data=temp; p->next=head->next; head->next=p;/*在链表头部插入结点,即头插法*/ } printf("请输入结点值(输入0结束):"); fflush(stdin); scanf("%c",&temp); } return head; } /*顺序输出链表的内容*/ void ListPint_L(LinkList head) { LinkList p; int i=0; p=head->next; while(p!=NULL) { i++; printf("单链表第%d个元素是:",i);

线性表的基本操作

实验一:线性表的基本操作 1.实验目的: 1)掌握用VC++上机调试线性表的基本方法; 2)掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的运算。 2.实验内容: 1)线性表建立、插入、删除操作实现; 2)已知有序表SA,SB,其元素均为递增有序,将此两表归并成一个新有序表SC,且SC中的元素仍然递增有序。 #include #include #define OK 1 #define ERROR 0 typedefstruct Node { int data; struct Node *next; }Node,*LinkList; void InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } void CreateFromTail(LinkList L) { Node *r,*s; int flag=1; int c; r=L;

printf("尾插法建立单链表,输入-1结束\n"); while(flag) { scanf("%d",&c); if(c!=-1) { s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; } else { flag=0; r->next=NULL; } } } void printL(LinkList L) { Node *p; p=L; while(p->next!=NULL) { printf("%d ",p->next->data); p=p->next; } printf("\n"); } int InsertList(LinkList L,int i,int e) { Node *pre,*s; int k; if(i<1) { return ERROR; } pre=L; k=0; while(pre!=NULL&& k

相关文档
最新文档