线性表的应用
通过计算任意两个表的简单自然连接过程讨论线性表的应用。书本2.4
#include<iostream> using namespace std; #define MaxCol 10 typedef struct Node1 { int data[MaxCol]; struct Node1 *next; }DList; typedef struct Node2 { int Row,Col; DList *next; }HList; void CreateTable(HList *&h) { int i,j; DList *r,*s; h=(HList *)malloc (sizeof(HList)); h->next=NULL; printf("表的行数,列数:"); scanf("%d%d",&h->Row,&h->Col); for(i=0;i<h->Row;i++) { printf("第%d行",i+1); s=(DList *)malloc (sizeof(DList)); for(j=0;j<h->Col;j++) { scanf("%d",&s->data[j]); if(h->next==NULL) h->next=s; else r->next=s; r=s; } r->next=NULL; } } void DispTable (HList *h) { int j; DList *p=h->next; while(p!=NULL) { for(j=0;j<h->Col;j++) printf("%4d",p->data[j]); printf("\n"); p=p->next; } } void LinkTable(HList *h1,HList *h2,HList *&h) { int i,j,k; DList *p=h1->next,*q,*s,*r; printf("连接字段是:第一个表位序,第二个表位序:"); scanf("%d%d",&i,&j); h=(HList *)malloc (sizeof(HList)); h->Row=0; h->Col=h1->Col+h2->Col; h->next=NULL; while (p!=NULL) { q=h2->next; while(q!=NULL) { if(p->data[i-1]==q->data[j-1]) { s=(DList *)malloc (sizeof(DList)); for(k=0;k<h1->Col;k++) s->data[k]=p->data[k]; for(k=0;k<h2->Col;k++) s->data [h1->Col+k]=q->data[k]; if(h->next==NULL) h->next=s; else r->next=s; r=s; h->Row++; } q=q->next; } p=p->next; } r->next=NULL; } void main() { HList *h1,*h2,*h; printf("表1:\n"); CreateTable(h1); printf("表2:\n"); CreateTable(h2); LinkTable(h1,h2,h); printf("连接结果表:\n"); DispTable(h); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)