数据结构简答的线性表的插入,删除,合并,输出地址,可能会有错误,希望大家修正
线性表示数据结构中较为重要的一个结构,实现增删查改,主要参考严版的数据结构,以下为代码部分
// listSq.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <malloc.h>
using namespace std;
#define list_init_size 100 //init size
#define listincerment 10 //increment
//----动态分配顺序存储结构---
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
//---实现插入操作---
SqList InitList_Sq(SqList &La,int i, int e){//La的第i个位置插入元素e,这里是整形,可以换成string类型
if (i<1 || i>La.length + 1)//i不合法
return La;
else if (La.length >= La.listsize){//当前存储空间已满,增加分配
La.elem = (int *)realloc(La.elem, (La.listsize + listincerment)*sizeof(int));
if (!La.elem)
exit(OVERFLOW);//存储分配失败
La.listsize += listincerment;//增加存储容量
}
int* q;//q为插入位置
int* p;//p为往后移元素位置
q = &(La.elem[i - 1]);
for (p = &La.elem[La.length - 1]; p >= q;--p)//p为最后的元素
*(p+1)=*p;//元素后移,插入一次,后移一次
*q = e;
++La.length;
return La;
}
//---实现删除操作---
SqList DeleList_Sq(SqList &La, int i, int &e){//La的第i个位置删除元素e,这里是整形,改元素为地址,主要是删除地址
if (i<1 || i>La.length + 1)//i不合法
return La;
int* p;
int* q;
p = &La.elem[i - 1];
e = *p;//将该元素地址占用,拷贝赋值
q = La.elem + La.length - 1;
for (++p; p <= q; ++p)
*(p - 1) = *p;
--La.length;
return La;
}
//---实现查找操作
int LocateElem_Sq(SqList L, int e){
int i = 1;
int* p = L.elem;
while (i<=L.length&&*p++!=e){
++i;
}
if (i <= L.length)
return i;
else
return 0;
}
//---实现两个链表合并操作
SqList MergeList_Sq(SqList La, SqList Lb, SqList &Lc){
//这里先不实现排序,假设我们已知顺序表La,Lb元素按值得非递减排列
int* pa;
int* pb;
int* pc;
pa = La.elem;//指向链表的第一个元素
pb = Lb.elem;
Lc.listsize = La.listsize + Lb.listsize;
Lc.length = La.length + Lb.length;
Lc.elem = (int*)malloc(Lc.listsize*sizeof(int));
pc = Lc.elem;
if (!Lc.elem)
exit(OVERFLOW);
int* pa_last;
int* pb_last;
pa_last = La.elem + La.length - 1;
pb_last = Lb.elem + Lb.length - 1;
while (pa <= pa_last&&pb <= pb_last){
if (*pa <= *pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while (pa < pa_last)//插入剩余的La元素
{
*pc++ = *pa++;
}
while (pb < pb_last)//插入剩余的Lb元素
{
*pc++ = *pb++;
}
return Lc;
}
int _tmain(int argc, _TCHAR* argv[])
{
SqList la;
la.elem = (int *)malloc(list_init_size*sizeof(int));
if (!la.elem)
exit(OVERFLOW);
la.length = 10;
la.listsize = list_init_size;
for (int i = 2; i <= 10; ++i)
InitList_Sq(la, i, i);
int j = 9;
cout << &la.elem[17];
system("pause");
return 0;
}