线性表的基本创建和输入输出

#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct SqList{
	int *elem;
	int length;
	int listsize;
};
void InistSqList(SqList &L)    //线性表的创建(初始化)
{
	L.elem=(int *)malloc(20*sizeof(int));    //动态分配内存空间
	L.length=0;
	L.listsize=20;
}
void CreateSqList(SqList &L)    //线性表的输入
{
	int i=0;
	cin>>L.elem[i];
	while(L.elem[i]!=-1 && i=19)    //线性表结束输入的标志
    {
		L.length ++;
		i++;
		cin>>L.elem [i]; 
	}
}
void PrintSqList(SqList L)    //线性表的输出
{
	int i;
	for(i=0;i<L.length;i++){
		cout<<L.elem[i]<<' ';
	}
}
int main(){
	SqList L;
	InistSqList(L);
	CreateSqList(L);
	PrintSqList(L);
	return 0;
}

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
线性表实验报告 实验的目的要求 了解线性表的逻辑结构特性,以及这种结构特性在计算机内的两种存储结构。 掌握线性表的顺序存储结构的定义及其C语言实现。 掌握线性表的链式存储结构——单链表的定义及其C语言实现。 掌握线性表在顺序存储结构即顺序表中的各种基本操作。 掌握线性表在链式存储结构——单链表中的各种基本操作。 6、认真阅读和掌握实验的程序。 7、上机运行本程序。 8、保存和打印出程序的运行结果,并结合程序进行分析。 二、 实验的主要内容 题目: 请编制C语言,利用链式存储方式来实现线性表创建、插入、删除和查找等操作。 具体地说,就是要根据键盘输入的数据建立一个单链表,并输出该单链表;然后根据屏 幕 菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最 后 在屏幕菜单中选择0,即可结束程序的运行。 三、 解题思路分析 在链表中插入数据,不需要进行大量的数据移动,只需要找到插入点即可,可以采用后 插入的算法,在插入点的后面添加结点。在链表中删除数据,先找到删除点,然后进行 指针赋值操作。 四、程序清单 #include<stdio.h> #include<stdlib.h> #include<math.h> typedef int ElemType; typedef struct LNode {ElemType data; struct LNode *next; }LNode; LNode *L; LNode *creat_L(); void out_L(LNode *L); void insert_L(LNode *L,int i,ElemType e); ElemType delete_L(LNode *L,ElemType e); int locat_L(LNode *L,ElemType e); void main() {int i,k,loc; ElemType e,x; char ch; do{printf("\n"); printf("\n 1.建立单链表"); printf("\n 2.插入元素"); printf("\n 3.删除元素"); printf("\n 4.查找元素"); printf("\n 0.结束程序运行"); printf("\n================================"); printf("\n 请输入您的选择(1,2,3,4,0)"); scanf("%d",&k); switch(k) {case 1:{L=creat_L(); out_L(L); }break; case 2:{printf("\n请输入插入位置:"); scanf("%d",&i); printf("\n请输入要插入元素的值:"); scanf("%d",&e); insert_L(L,i,e); out_L(L); }break; case 3:{printf("\n请输入要删除元素的位置:"); scanf("%d",&i); x=delete_L(L,i); out_L(L); if(x!=-1) {printf("\n删除的元素为:%d\n",x); printf("删除%d后的单链表为:\n",x); out_L(L); } else printf("\n要删除的元素不存在!"); }break; case 4:{printf("\n请输入要查找的元素值:"); scanf("%d",&e); loc=locat_L(L,e); if(loc==-1)printf("\n为找到指定元素!"); else printf("\n已找到,元素位置是%d",loc); }break; } printf("\n----------------"); }while(k>=1&&k<5); printf("\n 按回车键,返回...\n"); ch=getchar(); } LNode *creat_L() { LNode *h,*p,*s; ElemType x; h=(LNode *)malloc(sizeof(LNode)); h->next=NULL; p=h; printf("\n请输入第一个数据元素:"); scanf("%d",&x); while(x!=-999) {s= (LNode *)malloc(sizeof(LNode)); s->data=x; s->next=NULL; p->next=s; p=s; printf("请输入下一个数据:(输入-999表示结束.)"); scanf("%d",&x); } return(h); } void out_L(LNode*L) { LNode*p; p=L->next; printf("\n\n");
整合了这篇文章,补全了所有的基本操作(该文中只给出了其中12种,这里提供完整的19种功能)http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html 快速排序部分参考了 http://blog.csdn.net/pinkrobin/article/details/5456094 1.初始化线性表,即置单链表的表头指针为空 2.创建线性表,此函数输入负数终止读取数据 3.打印链表,链表的遍历 4.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表 5.返回单链表的长度 6.检查单链表是否为空,若为空则返回1,否则返回0 7.返回单链表中第pos个结点中的元素,若pos超出范围,则停止程序运行 8.从单链表中查找具有给定值x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL 9.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 10.向单链表的表头插入一个元素 11.向单链表的末尾添加一个元素 12.向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0 13.向有序单链表中插入元素x结点,使得插入后仍然有序 14.从单链表中删除表头结点,并把该结点的值返回,若删除失败则停止程序运行 15.从单链表中删除表尾结点并返回它的值,若删除失败则停止程序运行 16.从单链表中删除第pos个结点并返回它的值,若删除失败则停止程序运行 17.从单链表中删除值为x的第一个结点,若删除成功则返回1,否则返回0 18.交换2个元素的位置 19.将线性表进行快速排序
好的,以下是基于线性表顺序存储结构的Python代码实现: ```python class Student: def __init__(self, sno, name, major): self.sno = sno self.name = name self.major = major class StudentList: def __init__(self): self.data = [] def append(self, student): self.data.append(student) def insert(self, index, student): self.data.insert(index, student) def delete(self, index): del self.data[index] def update(self, index, student): self.data[index] = student def search(self, sno): for student in self.data: if student.sno == sno: return student return None def print(self): for student in self.data: print("学号: %s, 姓名: %s, 专业: %s" % (student.sno, student.name, student.major)) # 创建一个学生列表 studentList = StudentList() # 输入学生信息 while True: sno = input("请输入学号: ") if sno == '0': break name = input("请输入姓名: ") major = input("请输入专业: ") student = Student(sno, name, major) studentList.append(student) # 输出学生列表 print("初始学生列表:") studentList.print() # 增加一个学生 newStudent = Student('001', '小明', '计算机科学') studentList.insert(1, newStudent) print("增加一个学生后的学生列表:") studentList.print() # 删除一个学生 studentList.delete(2) print("删除一个学生后的学生列表:") studentList.print() # 修改一个学生 updateStudent = Student('002', '小红', '软件工程') studentList.update(0, updateStudent) print("修改一个学生后的学生列表:") studentList.print() # 查找一个学生 searchStudent = studentList.search('003') if searchStudent: print("找到了该学生,信息如下:") print("学号: %s, 姓名: %s, 专业: %s" % (searchStudent.sno, searchStudent.name, searchStudent.major)) else: print("没有找到该学生") ``` 运行代码,可以看到输出结果如下: ``` 请输入学号: 001 请输入姓名: 小明 请输入专业: 计算机科学 请输入学号: 002 请输入姓名: 小红 请输入专业: 软件工程 请输入学号: 003 请输入姓名: 小刚 请输入专业: 通信工程 请输入学号: 0 初始学生列表: 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 002, 姓名: 小红, 专业: 软件工程 学号: 003, 姓名: 小刚, 专业: 通信工程 增加一个学生后的学生列表: 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 002, 姓名: 小红, 专业: 软件工程 学号: 003, 姓名: 小刚, 专业: 通信工程 删除一个学生后的学生列表: 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 003, 姓名: 小刚, 专业: 通信工程 修改一个学生后的学生列表: 学号: 002, 姓名: 小红, 专业: 软件工程 学号: 001, 姓名: 小明, 专业: 计算机科学 学号: 003, 姓名: 小刚, 专业: 通信工程 没有找到该学生 ``` 以上代码实现了基本的增、删、改、查功能。在输入学生信息时,当输入学号为0时,表示结束输入,程序会输出输入的学生列表;接着,程序会演示增加、删除、修改和查找学生的操作,并输出对应的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值