建立一個鏈式線性表
阿新 • • 發佈:2018-12-08
建立一個鏈式線性表,並實現排序和插入資料
在敲這個程式碼時一直很糾結,邏輯上毫無錯誤,最後才發現是指標沒學好。
在對尾部元素進行置空時,若想少定義指標去建立連結串列就必須要在迴圈中增加判斷,否則當執行完h->next=h後再將h指向空並不代表h->next也指向空。
貌似蘊涵著一個哲學意義:此時的你並非彼時的你
#include <iostream>
#include<cstdlib>
using namespace std;
typedef struct v{
int e;
struct v *next;
int length;
}v;
v* initsq(){
struct v *sq;
sq=(struct v*)(malloc(sizeof(struct v)));
sq->next=NULL;
sq->length=0;
}
void insertsq(v *sq,int data){
v *p=(v*)(malloc(sizeof(v)));
p->e=data;
v *q=sq->next;
if(data<=q->e){
q->next=sq->next;
sq->next=q;
}
else{
int temp=q-> next->e;//data必定>sq->next->e因此從p->next->e開始
while(data>temp&&q->next!=NULL){
q=q->next;
if(q->next)
temp=q->next->e;
}
p->next=q->next;
q->next=p;
}
sq->length++;
}
void sort(v* sq){
v* p=sq->next;
v* q;
while(p!=NULL){
q=p->next;
while(q!=NULL){
if(q->e<p->e){
int temp=p->e;
p->e=q->e;
q->e=temp;
}
q=q->next;
}
p=p->next;
}
}
void change(int *p,int *q){
int temp=*p;
*p=*q;
*q=temp;
}
void printsq(v *sq){
v* h=sq->next;
while(h!=NULL){
printf("%d ",h->e);
h=h->next;
}
printf("\n");
}
int main(int argc, char** argv) {
struct v *sq;
sq=initsq();
struct v *h=(v*)(malloc(sizeof(v)));
sq->next=h;
printf("input N:");
int n;
scanf("%d",&n);
while(n--){
scanf("%d",&h->e);
if(n==0)
break;
h->next=(v*)(malloc(sizeof(v)));
h=h->next;
}
h->next=NULL;
printsq(sq);
sort(sq);
printsq(sq);
printf("insert number:");
int data;
scanf("%d",&data);
insertsq(sq,data);
printsq(sq);
printf("\nlength=%d",&sq->length);
return 0;
}