顺序表
#include单链表using namespace std; #define MaxS 100 typedef int Elem; typedef struct { Elem date[MaxS]; int length; }Sqlist; void printlist(Sqlist &q) { for(int i = 0; i < q.length; i++) { cout< q.length) { return 0; } return q.date[p-1]; } int deletesqlist(Sqlist &q,int i) { if(q.length==0 || i < 1 ||i > q.length) { cout<<"删除失败"< q.length + 1 || n < 1 ) { cout<<"插入位置不对"< = n-1;j --) { q.date[j+1] = q.date[j]; } q.length++; q.date[n-1] = m; } bool searchelem(Sqlist &q,int e) { for(int i = 1;i <= q.length; i ++) { if(getelem(q,i) == e) { return true; } } return false; } int main() { cout<<"声明我们考虑的都是已经排好次序的线性表"< >q.length; cout<<"输入线性表:"< >q.date[i]; } // cout<<"------------获取元素---------------"< >p; // int res = getelem(q,p); // cout< >k; // deletesqlist(q,k); // printlist(q);//打印 // cout< >m; // cout<<"插入第几位"< >n; // insertelem(q,m,n); // printlist(q); // cout<<"------------查找元素---------------"< >h; // bool ress = searchelem(q,h); // cout< //#include //#define MAXSIZE 1000//宏定义一个大小为一千万的内存空间。(我个人PTA上最大测试点为一千万) //typedef struct //{ // int *elem; // int length; //} SqList;//定义线性表。 //void InitList(SqList *l); //void InitList(SqList *l) //{ // l->elem = (int*)malloc(sizeof(int)*MAXSIZE); // //或直接用l.elem=(int*)malloc(MAXSIZE);//因为elem为int型,所以前面用int; // //关于malloc:申请空间;分配的大小是参数,返回值是指针。 // l->length = 0; //}//线性表的初始化。 //int main() //{ // int i = 0, j = 0, k = 0, m = 0, n = 0, z = 0; // SqList l1, l2, newl,result; // InitList(&l1); // InitList(&l2); // InitList(&newl); // InitList(&result); // //传入函数体中,将线性表初始化。 // do { // scanf("%d", &l1.elem[i]); // i++; l1.length++; // } while (l1.elem[i - 1] != -1); // // do { // scanf("%d", &l2.elem[j]); // j++; l2.length++; // } while (l2.elem[j - 1] != -1); 为线性表输入数据。 // for (k = 0; l1.elem[m] != -1 && l2.elem[n] != -1; k++) // { // if (l1.elem[m] < l2.elem[n]) // { // newl.elem[k] = l2.elem[n]; // n++; // } // else // { // newl.elem[k] = l1.elem[m]; // m++; // } // newl.length++; // } // if (l1.elem[m] == -1) // { // while (l2.elem[n] != -1) // { // newl.elem[k] = l2.elem[n]; // n++; k++; newl.length++; // } // }//线性表的合并,必有其一先截止,所以将未截止的线性表中其余数据放入新表。 // else // { // while (l1.elem[m] != -1) // { // newl.elem[k] = l1.elem[n]; // m++; k++; newl.length++; // } // } // if (k == 0)//当两个两表均为空时的判定。此判定可有多种方式,如newl.elem[0]==-1,newl.length==0; // { // printf("NULL"); // return 0; // } // // int deng = 0; // int res = newl.elem[0]; // for(int i = k-1;i >= 0; i--) // { // if(res != newl.elem[i]) // { // res = newl.elem[i]; // result.elem[deng] = newl.elem[i]; // deng++; // } // // } // // for (z = 0; z < deng; z++) // { // if(z!=deng-1) // printf("%d,", result.elem[z]); // else // printf("%d",result.elem[z]); // }//新表输出。 // // // // return 0; //}
头指针和头节点区别
头指针:
1.头指针是指向,链表的第一个结点的指针,如果链表有头节点,那么就指向头节点
2.无论链表是否为空头指针为不为空,头指针是链表必要元素
头节点:
1.数据域不存放任何东西
2.头节点不是必须元素
在这里插入图片描述
链表
#includeusing namespace std; typedef int Status; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef struct node { int elem; struct node *next; }node,*linklist; //初始化 Status InitList(linklist &l) { l = new node; l->next = NULL; return OK; } //创建链表 void creatlisthead(linklist &l,int n) { linklist p; l = new node; l->next=NULL; for(int i = 0;i < n; i ++) { p = new node; cin>>p->elem; p->next = l->next; l->next = p; } } void creatlisttail(linklist &l,int n) { node *p,*r; l = new node; l->next = NULL; r = l; for(int i = 0; i < n; i ++) { p = new node; cin>>p->elem; r->next=p; r = p; } r->next=NULL; } //打印表 void printlist(linklist &l) { linklist p = l->next;//头节点没有用嗷,头节点 while(p) { cout< elem<<" "; p = p->next; } printf("n"); } //删除元素 int delectelem(linklist &l,int i) { int j; linklist p,q; p = l; while (p->next && j < i) { p = p->next; ++j; } if (!(p->next) || j > i) { cout<<"该元素不存在"< next; p->next = q->next; free(q); return 1; } int main() { linklist l; InitList(l); cout<<"请输入要输入元素个数"< >n; // cout<<"----------头插法----------"< >k; delectelem(l,k-1); printlist(l); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)